1. 程式人生 > >python列表的回顧練習

python列表的回顧練習

  • 1列表的定義
有了列表容器,我們可以使用一個變數來儲存多個數據更重要的是,我們可以使用迴圈對容器中儲存的資料進行操作
def main():
    f = [12, 45, 99, 68, 777, 32]  # 初始化容器
    # 索引 - 下標 第一個元素的下標為0 通過下標取資料,修改資料
    print(f[0])
    print(f[2])
    print(f[5])
    f[4] = 77
    print(f[4])


if __name__ == '__main__':
    main()
  • 2 獲取檔案字尾名
# 如果給的檔名沒有後綴名,怎麼處理
# 要考慮到各種情況 # rfind方法---找點,最右邊的點,從右往左找,很有可能是 # pos不能等負一 # 設計一個函式,給你檔名,擷取該檔案的字尾名 # 帶點字尾名的做法---預設設為has_dot=False,不帶點 # 重新設定一個變數index, # 如果需要點,呼叫的時候,後面要註明True,就將pos的值賦值給index; # 如果不需要點,就將pos + 1的值賦值給index,呼叫的時候還是按照預設值來,無需加True def get_suffix(filename, has_dot=False): """ 獲取檔名的字尾名 :param filename: 檔名 :param has_dot: 字尾名是否帶點 :return: 檔案的字尾名 """
pos = filename.rfind('.') if 0 < pos < len(filename) - 1: index = pos if has_dot else pos + 1 # 三元條件運算子 # 切片操作 return filename[index:] else: return '錯誤資訊' def main(): a = get_suffix('hello.txt') b = get_suffix('hello.jpg', True) # 需要點的做法 c = get_suffix('abc.efg.txt'
) d = get_suffix('.abc') e = get_suffix('text.py') f = get_suffix('hello.c') print(a) print(b) print(c) print(d) print(e) print(f) if __name__ == '__main__': main() # 模組---單一職責原則,一個模組中不要塞太多的東西
  • 3 列表的新增、刪除元素
def main():
    f = [100, 200, 500]
    # 新增元素
    # insert 具有一定的容錯性,即使沒有該元素,也不會報錯
    f.append(123)
    f.insert(2, 300)
    f.insert(-1, 400)
    # 刪除元素
    """
    1.知道位置:del
    2.不知道位置,但知道元素是什麼:remove
    3.不知道元素位置,也不知道元素是什麼,先用if ... in ...判斷,看元素是否在列表裡
    """
    f.remove(500)
    del f[3] # 知道位置-下標,直接用del刪
    # f.clear() - 清空,一個都不剩
    # 判斷元素是否在列表容器中
    if 500 in f:  # 先檢檢視要刪除的元素是否在列表中,如果(條件成立)在,則刪除;如果不在,則靜默處理
        print(f)
    # f.index(500) 找不到會報錯
    f.pop()  # 幹掉列表中的最後一個元素提取出來,也可以帶索引引數
    print(f)


if __name__ == '__main__':
    main()
  • 4 列表中列舉的用法
def main():
    f = [100, 200, 500]
    print(f[0])
    print(f[1])
    print(f[2])
    # print(f[3]) list out of range-超出索引的範圍,無法取到
    print(f[-1])
    print(f[-2])
    print(f[-3])
    # print(f[-4]) list out of range-超出索引的範圍,無法取到
    # range(0)- 0 1 2
    for index in range(len(f)):
        print(f[index])
    for value in f:
        print(value)
    for val in f:
        val += 10
        print(val)
    print(f)
    # 給出下標的寫法,用列舉
    for index, val in enumerate(f):
        # enumerate為型別,返回的是一組元組,打出的為索引:值。既有下標又有值
        print(index, ':', val)
if __name__ == '__main__':
    main()
  • 5 搖色子練習
# 一個色子
from random import randint


def main():
    f = [0] * 6
    for _ in range(60000):
        dice = randint(1, 6)
        f[dice - 1] += 1
    print(f)


if __name__ == '__main__':
    main()


# 搖兩個色子做法一********************************

# 有了列表容器,我們可以使用一個變數來儲存多個數據
# 更重要的是,我們可以使用迴圈對容器中儲存的資料進行操作
from random import randint


def roll_dace(n=2):
    total = 0
    for _ in range(n):
        total += randint(1, 6)
    return total


def main():
    f = [0] * 11  # 2顆色子,2-12,一共有11種情況
    for _ in range(60000):
        dace = roll_dace()
        f[dace - 2] += 1
    point = 2  # 點數,從2點開始
    # 直接通過for in 迴圈對容器進行遍歷 -(遍歷-把容器中的元素過一遍)
    for counter in f:  # 取出容器中所有的數  counter 為f的下標,為0-10
        print('%d點搖出了%d次' % (point, counter))
        point += 1


if __name__ == '__main__':
    main()

# 搖兩個色子做法二********************************
from random import randint


def roll_dice(n=2):
    total = 0
    for _ in range(n):
        total += randint(1, 6)
    return total


def main():
    f = [0] * 11
    for _ in range(60000):
        dice = roll_dice(2)
        f[dice - 2] += 1
    # f_len = len(f)
    # print(f_len)
    for index in range(len(f)):  # 容器的長度,index的迴圈範圍為0-10
        print('%d點搖出了%d次' % (index + 2, f[index]))
        # 統計概率的做法
        print('%d點搖出了%.2f%%' % (index + 2, f[index] / 600))  # 600為概率的百分數


if __name__ == '__main__':
    main()

# 搖兩個色子做法三---列舉做法********************************
from random import randint


def roll_dice(n=2):
    total = 0
    for _ in range(n):
        total += randint(1, 6)
    return total


def main():
    f = [0] * 11
    for _ in range(60000):
        dice = roll_dice(2)
        f[dice - 2] += 1
    # f_len = len(f)
    # print(f_len)
    for index, val in enumerate(f):  # 容器的長度,index的迴圈範圍為0-10
        print('%d點搖出了%d次' % (index + 2, val))
        # 統計概率的做法
        print('%d點搖出了%.2f%%' % (index + 2, val / 600))  # 600為概率的百分數


if __name__ == '__main__':
    main()
  • 6 列表的排序
def main():
    # 給容器中的元素排序
    # 選擇排序
    # 氣泡排序
    f = ['orange', 'mango', 'grape', 'peach', 'apple', 'watermelon']
    # 方法1
    # 全域性函式 sorted ,是返回了一個新的列表容器,按照從小到大排列,預設a-z 升序
    f1 = sorted(f)
    print(f)
    print(f1)
    # 如果要按照從大到小的順序排,則需要用reverse
    f1.reverse()
    print(f1)
    # python內建的排列方法預設都是排升序(從小到大)
    # 如果希望排列成升序(從大到小),可以通過reverse引數來指定
    f2 = sorted(f, reverse=True)
    print(f2)
    # python中的函式幾乎都是沒有副作用的函式
    # 呼叫函式之後不會影響傳入的引數

    # 方法2
    f.sort(reverse=True)  # 預設也是升序
    print(f)

    # 得到一個反轉之後的容器
    f3 = reversed(f)
    print(f)


if __name__ == '__main__':
    main()
  • 7 # 斐波拉契數列
# 斐波拉契數列
# 1     0
# 1     1
# 2     1
# 3     2
# 5     3
# 8     5
#[1, 1, 2, 3, 5, 8, 13, 21, ...]
# 黃金分割就是從這裡來的

def main():
    # 前兩個數是指定的
    f = [1, 1]
    print(f)
    for index in range(2, 20):
        var = f[index -1] + f[index - 2]
        f.append(var)
        print(f)
    print(f)
    print(f[18] / f[19])  # 黃金分割點
    f2 = f[18:]  # 列表切片, 把索引為18的後面元素都取出來,為f[18],f[19]
    print(f2[0] / f2[1])
    print(f2)
    # 列表切片做反轉運算
    f3 = f[::-1]  # 第一個冒號前面:為開始索引,第二個冒號前面:為結束索引,-1為步長
    print(f3)
    f.reverse()  # 徹底把原來的反轉
    print(f)


if __name__ == '__main__':
    main()