字符串和常用的數據結構

使用字符串

def main():
    # 不變字符串
    str1 = 'hello,world'
    print(len(str1))  # 得到字符串的長度
    print(str1.upper())  # 獲得字符串首字母大寫
    print(str1.startswith('he'))  # 檢查字符串是否以指定的字符串開頭
    print(str1.endswith('d'))  # 檢查字符串是否以指定的字符串結尾
    print(str1.center(50, '*'))  # 將字符串以指定的寬度居中并在兩側填充指定的字符
    print(str1.rjust(50, ' '))  # 將字符串以指定的寬度靠右放置左側填充指定的字符

    str2 = 'abc123456'
    print(str2[2])  # c
    print(str2[2:5])  # c12
    print(str2[-1:-3:-1])  # 65
    print(str2.isdecimal())  # 全是數字   False
    print(str2.isalpha())  # 全是字母     False
    print(str2.isalnum())  # 字母和數字   True 

    str3 = '  ljl  '
    print(str3)           #   ljl
    print(str3.strip())   # ljl

Python中存儲數據結構的除了字符串還有:列表,元組,集合,字典

列表

下面演示了列表的定義,添加,刪除和訪問:

 def main():
    list1 = [10, 20, 30, 40, 50]
    print(list1)
    list2 = ['ljl'] * 5
    print(list2)
    print(len(list1))  # 計算列表長度(元素個數)
    print(list1[0]) # 下標(索引)運算 索引的范圍是[0,n-1]
    print(list1[4])
    print(list1[-1]) # 得到最后一個值

    list1[2] = 300
    print(list1)
    list1.append(200) # 添加元素,添加到列表最后
    list1.insert(1, 400) # 在指定位置添加元素
    list1 += [1, 2] #添加列表
    print(list1)
    print(len(list1))
    list1.remove(3) # 刪除列表中3這個元素
    if 1in list1:
        list1.remove(1)
    del list1[0]
    print(list1)
    # 清空列表元素
    list1.clear()
    print(list1)


if __name__ == '__main__':
    main()

列表也可以做切片:

def main():
    list1=['ljl', 'zy', 'haha']
    list1 += ['apple', 'orange']
    for val in list1:
        print(val, end=' ')
    # 列表切片
    list2 = [1, 2, 3, 4]
    list3 = list2[1:3]
    print(list3)

    list4 = list2[:]
    print(list4)

    # 當然我們也可以設置切片的步長
    list5 = list2[::2]


if __name__ == '__main__':
    main()

列表的一系列操作:

def main():
    f = ['a', 'b', 'd', 'c', 's', 'f', 'g']
    # python內置的排序方法默認都是升序排序(從小到大)
    # 如果希望排列成降序(從大到小)可以通過reverse參數來指定
    # Python中的函數幾乎都是沒有副作用的函數
    # 調用函數之后不會影響傳入的參數
    f2 = sorted(f, reverse=True)  # 函數
    print(f)
    print(f2)
    f.sort(reverse=True)  # 改變f的自身 當resverse = True時候則會倒序
    print(f)
    f.sort()  # 會改變本f自身進行排序
    print(f)

if __name__ == '__main__':
    main()

列表可以使用生成式語法來生成一個列表:

def main():
    f = [x + y for x in 'ABCD' for y in '1234567']
    print(f)
    f = list(range(1, 10))
    print(f)
    f = [x for x in range(1, 10)]
    print(f)
    # 用列表的生成表達式創建列表容器
    # 用這種語法創建列表之后元素已經準備就緒所以需要耗費較多的內存空間
    f = [x ** 2 for x in range(1, 10)]
    print(f)
    print(sys.getsizeof(f))

    # 列表生成器 這里得到的不是一個列表  而是一個生成器對象
    # 通過生成器可以獲取到數據  它不占用額外的空間儲存數據
    # 每次需要數據的時候就通過生成器獲取數據  當然這需要花費時間
    f = (x ** 2 for x in range(1, 10))
    print(sys.getsizeof(f))
    for val in f:
        print(val, end=' ')


if __name__ == '__main__':
    main()

除了上面的生成器語法之外,我們還可以在函數之中定義,使用關鍵字yield并且函數中的return關鍵字應當移除:
斐波拉契數列

def fib(n):
    a, b = 0, 1
    for _ in range(n):
        a,b = b, a+b
        yield a


if __name__ == '__main__':
    for val in fib(10):
        print(val, end=' ')
"""
運行結果:1 1 2 3 5 8 13 21 34 55 
"""

元組

元組和列表比較相似,只不過元組里面的元素是不可以更改的而且元組在創建的時間和儲存的空間上都優于列表:

def main():
    tuple1 = (1, 1, 2, 2, 3, 3)   # 定義一個元組
    print(tuple1)  #  打印出整個元組
    for val in tuple1:
        print(val, end=' ')  # 遍歷的到元組中的值
    # 不可以使用索引號給元組中的元素賦值 但是可以將元組全部重新定義
    tuple1 = (2, 1, 2, 2, 3, 3)
    print(tuple1)

    # 可以將元組轉化成列表
    list1 = list(tuple1)
    print(list1)
    # 列表是可以修改它之中的每一個元素
    list1[0] = 5
    print(list1)
    # 相對應的 列表也可以轉化成元組
    tuple2 = tuple(list1)
    print(tuple2)


if __name__ == '__main__':
    main()

集合

Python中的集合和數學上的集合是一樣的,不允許有重復的數據出現,而且也有交集、并集、差集。

def main():
    # 定義一個集合
    set1 = {1, 1, 2, 2, 3, 3}
    print(set1) 
    set1.add(4)
    set1.add(5)
    set2 = {1, 3, 5, 7, 9}
    
    set3 = set1.intersection(set2) # set3 = set1 & set2 交集運算
    print(set3)

    set3 = set1.union(set2)  # set3 = set1 | set2  并集運算
    print(set3)

    set3 = set1.difference(set2)  # set3 = set1 - set2  差集運算
    print(set3)

    set3 = set2.difference(set1)
    print(set3)

    set3 = set1.symmetric_difference(set2)  # set3 = set1 ^ set2  對稱差運算
    print(set3)
    # 集合是沒有順序的 所以不能用索引序號
    for val in set2:
        print(val)
    set4 = {1, 2, 10}
    print(set4.issubset(set1))  # 子集 set4 <= set1
    print(set1.issuperset(set4))  # 超集  set1 >= set4
    print(set1.pop())  # 隨機刪除集合里面的元素
    print(set1)
    set1.remove(2)
    print(set1)
    print(set1)


if __name__ == '__main__':
    main()

字典

字典可以儲存任意一個數據,字典里面的元素是一個鍵和一個值組成(鍵值對),鍵和值用冒號隔開。

def main():
    dict1 = {'name': '劉家洛', 'age': 24, 'gender': True}
    print(dict1['name'])
    print(dict1['age'])
    print(dict1['gender'])

    dict1['name'] = 'ljl'
    del dict1['gender']  # 刪掉其中的元素
    # 字典的遍歷其實就是通過字典的鍵取到對應的值
    for x in dict1:
        print(x,'---->', dict1[x])

    # 更新字典中的元素
    dict1['name'] = 'ljl'
    dict1['age'] = '23'
    print(dict1)
    dict1.update(age=10) # 直接更新字典中鍵對應的值
    print(dict1)
    # get 方法 通過鍵來獲取相應的值,如果沒有該鍵則第二個參數就是其默認值
    print(dict1.get('zy', 10))
    print(dict1.get('name', 10))

    # 刪除字典中的元素
    # dict1.popitem()  # 刪掉字典中的所有元素
    print(dict1.pop('name')) # 刪掉字典中的key=name的元素
    print(dict1)

    # 清空字典
    dict1.clear()
    print(dict1)
    # dict1.setdefault('motto','成年人的世界里沒有容易二字')


if __name__ == '__main__':
    main()

練習題

1.文件后綴名生成

# 給你一個文件名取出文件的后綴名


def file_suffix(file, has_dot=False):
    """
    得到文件后綴名
    :param file: 文件名
    :param has_dot: 后綴是否帶點(.)
    :return: 文件后綴名
    """
    pos = file.rfind('.')
    if 0 < pos < len(file) - 1:
        index = pos if has_dot else pos + 1
        return '文件的后綴名是:'+file[index:]
    else:
        return ''


if __name__ == '__main__':
    my_file = input('請輸入一個文件名:')
    print(file_suffix(my_file))
    print(file_suffix(my_file, True))

2.指定某天計算出改天是當年的第幾天

# 設計一個函數傳入年月日返回這一天是這一年的第幾天
def is_today(y, m, d):
    num = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    total = 0
    for x in range(m-1):
        total += num[x]
    if y % 400 == 0 or (y % 4 == 0 and y % 100 != 0):
        if m > 2:
            total += 1
    return total + d


def main():
    year = int(input('year = '))
    month = int(input('month = '))
    day = int(input('day = '))
    print(is_today(year, month, day))


if __name__ == '__main__':
    main()

3.楊輝三角

def yhsn(num):
    list1 = [[1], [1, 1]]
    for x in range(2, num):
        list2 = [1]
        for y in range(x - 1):
            list2.append(list1[x-1][y]+list1[x-1][y+1])
        list2.append(1)
        list1.append(list2)
    return list1


if __name__ == '__main__':
    n = int(input('請輸入楊輝三角的行數:'))
    print(yhsn(n))

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容