python學習03——列表

[TOC]

列表相當于Java中的數組,python中的列表可以存儲任意類型的元素,同時列表會根據存儲內容動態分配內存

1 創建列表

1.1 使用[]創建列表

mylist = ["hello", "word", 98]
print(mylist)  # ['hello', 'word', 98]

1.2 使用內置函數list()創建列表

mylist2 = list(["hello", "word", 2022])
print(mylist2)  # ['hello', 'word', 2022]

2 查詢元素

2.1 index()函數

2.1.1 如果列表有多個重復元素,index()只返回第一個元素的索引。

mylist = ["hello", "word", 98, "hello"]

print(mylist.index("hello"))  # 0

2.1.2 如果列表中沒有此元素,則會拋出異常。

mylist = ["hello", "word", 98, "hello"]

print(mylist.index("python"))  

拋出異常:

Traceback (most recent call last):
  File "D:\pythonStudy\fistproject\demo11.py", line 3, in <module>
    print(mylist.index("python"))  
ValueError: 'python' is not in list

2.1.3 可以指定查詢位置。

使用index(obj, start, end)查詢元素位置,從startend前一位,不包括end位置。

mylist = ["hello", "word", 98, "hello"]

print(mylist.index("hello", 1, 4))  # 3

可以看見,查詢的范圍是:"word", 98, "hello"

2.2 獲取指定索引位置的元素

Java類型,但是要注意一點,python中索引可以是負數:

  • 正向索引:元素從0N-1
  • 逆向索引:元素從-N-1
mylist = ["hello", "word", 98, "python"]

# 正向索引
print(mylist[3])  # python
# 逆向索引
print(mylist[-1])  # python

2.3 列表的切片

列表的切片就是列表的拷貝語法為列表名[start: stop: step],其中,不包含stop的元素

  • 切片后的列表,是新的列表,和原列表的ID不一樣
  • 切片的范圍:[start, stop)
  • 步長step默認為1
  • step為正數時,從start開始往后切片:
    • [: stop: step]:切片的第一個元素默認是列表的第一個元素
    • [start: : step]:切片的最后一個元素默認是列表的最后一個元素
  • step為負數時,從start開始往前切片:
    • [: stop: step]:切片的第一個元素默認是列表的最后一個元素
    • [start: : step]:切片的最后一個元素默認是列表的第一個元素

2.3.1 切片使用和切片列表地址改變

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

# 切片從index為1到index為4
list1 = mylist[1: 5: 1]
print(list1)  # [20, 30, 40, 50]

# 地址改變
print("原列表地址:", id(mylist))  # 原列表地址: 2577983402944
print("新列表地址:", id(list1))  # 新列表地址: 2577983487232

2.3.2 默認start和默認stop和改變step

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

# 默認start
list1 = mylist[: 5: 1]
print(list1)  # [10, 20, 30, 40, 50]

# 默認stop
list1 = mylist[1:: 1]
print(list1)  # [20, 30, 40, 50, 60, 70, 80]

# 改變step
list1 = mylist[:: 2]
print(list1)  # [10, 30, 50, 70]

2.3.3 step為正數時

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

# step為正數
list1 = mylist[:: 1]
print(list1)  # [10, 20, 30, 40, 50, 60, 70, 80]

2.3.4 step為負數時

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

# step為正數
list1 = mylist[:: -1]
print(list1)  # [80, 70, 60, 50, 40, 30, 20, 10]

2.4 列表元素的判斷和遍歷

判斷使用innot in進行判斷。

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

# 元素的判斷
print(50 in mylist)  # True
print(100 in mylist)  # False
print(100 not in mylist)  # True

# 元素的遍歷
for item in mylist:
    if item == 50:
        break

3 列表增加元素

3.1 append()

append()函數是往列表的末尾增加一個元素。

mylist = ["hello", "world", 2022]

mylist.append(100)
print(mylist)  # ['hello', 'world', 2022, 100]

3.2 extend()

extend()函數是將其他列表元素添加到列表中。

list1 = ["python", "java", 2033]

# append是將list1作為一個元素,添加到mylist中
mylist = ["hello", "world", 2022]
mylist.append(list1)
print(mylist)  # ['hello', 'world', 2022, ['python', 'java', 2033]]

# extend是將list1的所有元素,依次添加到mylist中
mylist = ["hello", "world", 2022]
mylist.extend(list1)
print(mylist)  # ['hello', 'world', 2022, 'python', 'java', 2033]

3.3 insert()

insert()函數是在任意位置插入一個元素。

mylist = ["hello", "world", 2022]

mylist.insert(1, "New OBJ")
print(mylist)  # ['hello', 'New OBJ', 'world', 2022]

3.4 切片

切片是將從startend前一位的元素全部移除,并插入新列表的所有元素。

mylist = [10, 20, 30, 40, 50, 60, 70, 80]

mylist2 = ["python", "c++", "java"]

# 將mylist從index為1 到 index為3之前 的所有元素(20, 30)移除,并在這個位置插入mylist2
mylist[1:3] = mylist2
print(mylist)  # [10, 'python', 'c++', 'java', 40, 50, 60, 70, 80]

4 列表的刪除操作

4.1 remove()

remove()是刪除一個元素,但是要注意:

  • 如果有多個重復元素,則只刪除第一個
  • 如果列表中沒有該元素,則拋出異常
mylist = [10, 20, 30, 10, 20, 30]

mylist.remove(30)
print(mylist)  # [10, 20, 10, 20, 30]

# 拋出異常
# mylist.remove(100)  ValueError: list.remove(x): x not in list

4.2 pop()

pop()是刪除某個索引的元素,同Java中的remove()

mylist = [10, 20, 30, 10, 20, 30]

mylist.pop(1)
print(mylist)  # [10, 30, 10, 20, 30]

4.3 切片

要注意的是,切片會產生一個新的列表

mylist = [10, 20, 30, 10, 20, 30]

newList = mylist[1:3]
print(newList)  # [20, 30]
print("原ID:", id(mylist))  # 原ID: 1988783109056
print("新ID:", id(newList))  # 新ID: 1988783193344

4.4 clear()

clear()是清空列表的意思。

mylist = [10, 20, 30, 10, 20, 30]

mylist.clear()
print(mylist)  # []

4.5 del

del是刪除列表的意思,刪除后,此列表就不會存在。

mylist = [10, 20, 30, 10, 20, 30]

print(mylist)  # [10, 20, 30, 10, 20, 30]

del mylist
# 報錯
# print(mylist)  NameError: name 'mylist' is not defined. Did you mean: 'list'?

5 列表元素的修改

列表元素的修改有直接修改和切片兩種方式。

mylist = [10, 100, 30, 40, 50, 60]

# 直接修改
mylist[1] = 20
print(mylist)  # [10, 20, 30, 40, 50, 60]

# 切片 將mylist的從index為1到index為3之前的所有元素(20, 30)刪除,插入新的元素
mylist[1:3] = [300, 400, 500]
print(mylist)  # [10, 300, 400, 500, 40, 50, 60]

6 列表排序

列表排序通過以下兩種方式進行:

  • sort()函數:排序原列表,不生成新的列表;
  • 內置函數sorted():生成新的排序列表,原列表不發生改變。

默認排序是升序,同時,可以指定reserve=True來進行降序排序。

mylist = [23, 38, 29, 19, 88, 64]

print(mylist)  # [23, 38, 29, 19, 88, 64]
mylist.sort()
print(mylist)  # [19, 23, 29, 38, 64, 88]
# 降序排序
mylist.sort(reverse=True)
print(mylist)  # [88, 64, 38, 29, 23, 19]

# 使用內置函數
mylist = [23, 38, 29, 19, 88, 64]
newList = sorted(mylist, reverse=False)
print(mylist)  # [23, 38, 29, 19, 88, 64]  原列表不發生改變
print(newList)  # [19, 23, 29, 38, 64, 88]

7 列表生成式

列表生成式的公式為:[ 表達式 for i in range(1, 10) ]

舉例:

mylist = [i for i in range(1, 5)]
print(mylist)  # [1, 2, 3, 4]

# 表達式 生成10以內的偶數列表
mylist = [i*2 for i in range(1, 5)]
print(mylist)  # [2, 4, 6, 8]
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容