關(guān)于操作 Python 列表间护,最常見問答Top10

列表是最常用的數(shù)據(jù)類型之一,本文整理了 StackOverflow 上關(guān)于列表操作被訪問最多的10個(gè)問答挖诸,如果你在開發(fā)過程中遇到這些問題汁尺,不妨先思考一下如何解決。


1多律、迭代列表時(shí)如何訪問列表下標(biāo)索引


普通版:


items = [8, 23, 45]

for index in range(len(items)):

? ?print(index, "-->", items[index])


>>>

0 --> 8

1 --> 23

2 --> 45

優(yōu)雅版:


for index, item in enumerate(items):

? ?print(index, "-->", item)


>>>

0 --> 8

1 --> 23

2 --> 45

enumerate 還可以指定元素的第一個(gè)元素從幾開始痴突,默認(rèn)是0,也可以指定從1開始:


for index, item in enumerate(items, start=1):

? ?print(index, "-->", item)


>>>

1 --> 8

2 --> 23

3 --> 45

2狼荞、append 與 extend 方法有什么區(qū)別


append表示把某個(gè)數(shù)據(jù)當(dāng)做新元素追加到列表的最后面辽装,它的參數(shù)可以是任意對(duì)象


x = [1, 2, 3]

y = [4, 5]

x.append(y)

print(x)


>>>

[1, 2, 3, [4, 5]]

extend 的參數(shù)必須是一個(gè)可迭代對(duì)象,表示把該對(duì)象里面的所有元素逐個(gè)地追加到列表的后面


x = [1, 2, 3]

y = [4, 5]

x.extend(y)

print(x)


>>>

[1, 2, 3, 4, 5]


# 等價(jià)于:

for i in y:

? ?x.append(i)

3相味、檢查列表是否為空


普通版:


if len(items) == 0:

? ?print("空列表")


或者


if items == []:

? ?print("空列表")

優(yōu)雅版:


if not items:

? ?print("空列表")

4拾积、如何理解切片


切片用于獲取列表中指定范的子集,語(yǔ)法非常簡(jiǎn)單


items[start:end:step]

從 start 到 end-1 位置之間的元素丰涉。step 表示步長(zhǎng)殷勘,默認(rèn)為1,表示連續(xù)獲取昔搂,如果 step 為 2 就表示每隔一個(gè)元素獲取。


a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


>>> a[3:8] # 第3到第8位置之間的元素

[4, 5, 6, 7, 8]


>>> a[3:8:2] # 第3到第8位置之間的元素输拇,每隔一個(gè)元素獲取

[4, 6, 8]


>>> a[:5] ? # 省略start表示從第0個(gè)元素開始

[1, 2, 3, 4, 5]


>>> a[3:] ?# 省略end表示到最后一個(gè)元素

[4, 5, 6, 7, 8, 9, 10]


>>> a[::] ?# 都省略相當(dāng)于拷貝一個(gè)列表摘符,這種拷貝屬于淺拷貝

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

5、如何拷貝一個(gè)列表對(duì)象


第一種方法:


new_list = old_list[:]

第二種方法:


new_list = list(old_list)

第三種方法:


import copy

# 淺拷貝

new_list = copy.copy(old_list)

# 深拷貝

new_list = copy.deepcopy(old_list)

6策吠、如何獲取列表中的最后一個(gè)元素


索引列表中的元素不僅支持正數(shù)還支持負(fù)數(shù)逛裤,正數(shù)表示從列表的左邊開始索引,負(fù)數(shù)表示從列表的右邊開始索引猴抹,獲取最后一個(gè)元素有兩種方法带族。


>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> a[len(a)-1]

10

>>> a[-1]

10

7、如何對(duì)列表進(jìn)行排序


列表排序有兩種方式蟀给,一種是列表自帶的方式 sort蝙砌,一種是內(nèi)建函數(shù) sorted阳堕。復(fù)雜的數(shù)據(jù)類型可通過指定 key參數(shù)進(jìn)行排序。由字典構(gòu)成的列表择克,根據(jù)字典元素中的age字段進(jìn)行排序:



items = [{'name': 'Homer', 'age': 39},

? ? ? ? {'name': 'Bart', 'age': 10},

? ? ? ? {"name": 'cater', 'age': 20}]


items.sort(key=lambda item: item.get("age"))


print(items)


>>>

[{'age': 10, 'name': 'Bart'}, {'age': 20, 'name': 'cater'}, {'age': 39, 'name': 'Homer'}]

列表有 sort方法恬总,用于對(duì)原列表進(jìn)行重新排序,指定 key 參數(shù)肚邢,key 是匿名函數(shù)壹堰,item 是列表中的字典元素,我們根據(jù)字典中的age進(jìn)行排序骡湖,默認(rèn)是按升序排列贱纠,指定 reverse=True 按降序排列


items.sort(key=lambda item: item.get("age"), reverse=True)


>>>

[{'name': 'Homer', 'age': 39}, {'name': 'cater', 'age': 20}, {'name': 'Bart', 'age': 10}]

如果不希望改變?cè)斜恚巧梢粋€(gè)新的有序列表對(duì)象响蕴,那么可以內(nèi)置函數(shù) sorted 谆焊,該函數(shù)返回新列表


items = [{'name': 'Homer', 'age': 39},

? ? ? ? {'name': 'Bart', 'age': 10},

? ? ? ? {"name": 'cater', 'age': 20}]


new_items = sorted(items, key=lambda item: item.get("age"))


print(items)

>>>

[{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}, {'name': 'cater', 'age': 20}]


print(new_items)

>>>

[{'name': 'Bart', 'age': 10}, {'name': 'cater', 'age': 20}, {'name': 'Homer', 'age': 39}]

8、如何移除列表中的元素


刪除列表中的元素有三種方式


remove 移除某個(gè)元素换途,而且只能移除第一次出現(xiàn)的元素


>>> a = [0, 2, 2, 3]

>>> a.remove(2)

>>> a

[0, 2, 3]


# 如果要移除的元素不在列表中懊渡,則拋出 ValueError 異常

>>> a.remove(7)

Traceback (most recent call last):

?File "<stdin>", line 1, in <module>

ValueError: list.remove(x): x not in list·

del 根據(jù)指定的位置移除某元素


>>> a = [3, 2, 2, 1]

# 移除第一個(gè)元素

>>> del a[1]

[3, 2, 1]


# 當(dāng)超出列表的下表索引時(shí),拋出IndexError的異常

>>> del a[7]

Traceback (most recent call last):

?File "<stdin>", line 1, in <module>

IndexError: list assignment index out of range

pop 與del 類似军拟,但是 pop 方法可以返回移除的元素


>>> a = [4, 3, 5]

>>> a.pop(1)

3

>>> a

[4, 5]


# 同樣剃执,當(dāng)超出列表的下表索引時(shí),拋出IndexError的異常

>>> a.pop(7)

Traceback (most recent call last):

?File "<stdin>", line 1, in <module>

IndexError: pop index out of range

9懈息、如何連接兩個(gè)列表


listone = [1, 2, 3]

listtwo = [4, 5, 6]


mergedlist = listone + listtwo


print(mergelist)

>>>

[1, 2, 3, 4, 5, 6]

列表實(shí)現(xiàn)了 + 的運(yùn)算符重載肾档,使得 + 不僅支持?jǐn)?shù)值相加,還支持兩個(gè)列表相加辫继,只要你實(shí)現(xiàn)了 對(duì)象的 __add__操作怒见,任何對(duì)象都可以實(shí)現(xiàn) + 操作,例如:


class User(object):

? ?def __init__(self, age):

? ? ? ?self.age = age


? ?def __repr__(self):

? ? ? ?return 'User(%d)' % self.age


? ?def __add__(self, other):

? ? ? ?age = self.age + other.age

? ? ? ?return User(age)


user_a = User(10)

user_b = User(20)


c = user_a + user_b


print(c)


>>>

User(30)

10姑宽、如何隨機(jī)獲取列表中的某個(gè)元素


import random

items = [8, 23, 45, 12, 78]


>>> random.choice(items)

78

>>> random.choice(items)

45

>>> random.choice(items)

12

i

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遣耍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子炮车,更是在濱河造成了極大的恐慌舵变,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘦穆,死亡現(xiàn)場(chǎng)離奇詭異纪隙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扛或,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門绵咱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人熙兔,你說我怎么就攤上這事悲伶“眨” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵拢切,是天一觀的道長(zhǎng)蒂萎。 經(jīng)常有香客問我,道長(zhǎng)淮椰,這世上最難降的妖魔是什么五慈? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮主穗,結(jié)果婚禮上泻拦,老公的妹妹穿的比我還像新娘。我一直安慰自己忽媒,他們只是感情好争拐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晦雨,像睡著了一般架曹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闹瞧,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天绑雄,我揣著相機(jī)與錄音,去河邊找鬼奥邮。 笑死万牺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洽腺。 我是一名探鬼主播脚粟,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蘸朋!你這毒婦竟也來了核无?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤藕坯,失蹤者是張志新(化名)和其女友劉穎团南,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堕担,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年曲聂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霹购。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朋腋,死狀恐怖齐疙,靈堂內(nèi)的尸體忽然破棺而出膜楷,到底是詐尸還是另有隱情,我是刑警寧澤贞奋,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布赌厅,位于F島的核電站,受9級(jí)特大地震影響轿塔,放射性物質(zhì)發(fā)生泄漏特愿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一勾缭、第九天 我趴在偏房一處隱蔽的房頂上張望揍障。 院中可真熱鬧,春花似錦俩由、人聲如沸毒嫡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)兜畸。三九已至,卻和暖如春碘梢,著一層夾襖步出監(jiān)牢的瞬間咬摇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工痘系, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留菲嘴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓汰翠,卻偏偏與公主長(zhǎng)得像龄坪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子复唤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容