1. 程式人生 > 其它 >列表基本操作&內建方法

列表基本操作&內建方法

列表基本操作

列"表"來了

列表內一般都會儲存相同資料型別的資料

  • list的型別轉換
    資料型別關鍵字(需要轉換的資料)
print(list(123))  # 報錯
print(list(123.22))  # 報錯
print(list('hello'))  # ['h','e','l','l','o']
print(list({'username':'jason', 'pwd':123}))  # ['username', 'pwd']
# 只有key在列表當中

print(list((11, 22, 33)))  # [11,22,33]
print(list({11,22,33}))  # [33,11,22] 無序

# list關鍵字可以將支援for迴圈的資料型別轉換成列表

列表內建方法

name_list = ['jason', 'jack', 'tony', 'duke']
print(name_list[1:3])  # 切片 ['jack', 'tony']
print(name_list[0:4:2])  # 步長 ['jason', 'tony']
print(name_list[-1:-4:-1])  # 反向切片 ['duke', 'tony', 'jack']

# 統計列表中元素的個數
print(len(name_list))  # 4

必須掌握的

  1. 增、改
1.修改值
name_list[0] = 'alvin'

2.新增值
# 1. append尾部追加元素(括號內的資料當成一個整體追加到列表末尾,)
name_list.append('追加的')

# 2. insert插入元素(括號內的資料當成一個整體插入到指定位置,)
name_list.insert(0, '插入的')

# 3. extend擴充套件元素(底層相當於for迴圈+append)
name_list.extend([111,222,333,444])
  1. 刪除
方式一:del通用的刪除方式根據索引直接刪除
name_list = ['jason', 'jack', 'tony', 'duke']
del name_list[1]

方式二:remove()括號內指定需要移除的元素
name_list.remove('jason')

方式三:pop()彈出的值可以取到。
del_word = name_list.pop(1)  # 根據索引彈出,彈出的值可以取到
print(del_word)  # jack
name_list.pop()   # 不寫引數預設彈出尾部引數


可變型別與不可變型別

可變型別:值改變 記憶體地址不變,修改的是原值

# 測試 集合
set1 = {1, 2, 3, 4}
print(id(set1), type(set1), set1)
set1.add(88)
print(id(set1), type(set1), set1)
"""
1637988509728 <class 'set'> {1, 2, 3, 4}
1637988509728 <class 'set'> {1, 2, 3, 4, 88}
"""
# 測試列表
lis1 = [1, 2, 3, 4]
print(id(lis1), type(lis1), lis1)
lis1.append(88)
print(id(lis1), type(lis1), lis1)
"""
2169931235008 <class 'list'> [1, 2, 3, 4]
2169931235008 <class 'list'> [1, 2, 3, 4, 88]
"""
以此類推,測試元組,
tup1 = (1, 2, 3, 4, [12, 34, 56])
print(id(tup1), type(tup1), tup1)
tup1[4].append(888)
print(id(tup1), type(tup1), tup1)
"""
2528056840816 <class 'tuple'> (1, 2, 3, 4, [12, 34, 56])
2528056840816 <class 'tuple'> (1, 2, 3, 4, [12, 34, 56, 888])
但是我們不能以此說明元組是可變型別,元組的定義就是不可變的,我們修改了元組中列表的值,
但是因為列表是可變資料型別,所以雖然在列表中更改了值,但是列表的地址沒有改變,列表在元組中的地址的值也就沒有改變,
所以也就意味著元組沒有發生變化。我們就可以認為元組是不可變資料型別,因為元組是不可變的。
"""

# 測試字典時,也會發現
tuple = (1)
d = { tuple:1,'key2':'djx','key3':'li'}
print(d,type(d),id(d))
d['key4'] = 'haha'
print(d,type(d),id(d))
"""
{<class 'tuple'>: 1, 'key2': 'djx', 'key3': 'li'} <class 'dict'> 2322053173952
{<class 'tuple'>: 1, 'key2': 'djx', 'key3': 'li', 'key4': 'haha'} <class 'dict'> 2322053173952
"""

據此我們可以知道:列表,集合,字典,是可變資料型別

不可變型別:值改變 記憶體地址肯定變,產生了新值
字串,整型,浮點型,元組,是不可變資料型別

佇列與堆疊 作業!!

佇列:FIFO 先進先出first in first out
堆疊:FILO 先進後出(疊衣服)
用列表及內建方法,模擬出上述兩個資料結構的特性
放幾個數,取幾個數,模擬佇列/堆疊的特性實現。

# 定義一個存放名字的空列表
name_list = []
while True:
    name = input('請輸入您的名字(q/Q退出)>>>:').strip()
    if name.upper() == 'Q':
        break
    # 向列表中追加輸入的名字
    name_list.append(name)

# 佇列取值,直接for迴圈實現,先進先出
for i in name_list:
    print(i)

# 堆疊取值,用步長實現列表倒敘取值,實現先進後出
for j in range(len(name_list)-1, -1, -1):
    print(name_list[j])