日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
合并Python列表的魔幻12法

我喜歡12這個(gè)數(shù)字,因?yàn)橛刑嗟氖虑榕c12有關(guān)。一年有12個(gè)月;古代用12個(gè)時(shí)辰(地支)表示一天的時(shí)間。用一紀(jì)表示12年;希臘有12主神;黃道有12宮;撒迦利亞.西琴先生的《地球編年史》中描述的第12個(gè)天體(尼比魯);另外,朋友、愛人、戀人、家人的筆畫都是12。所以12注定是一個(gè)令人難忘的數(shù)字,現(xiàn)在我再為12加一種難忘的解釋:用12種方法合并Python列表。

創(chuàng)新互聯(lián)主營(yíng)肥鄉(xiāng)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),肥鄉(xiāng)h5微信平臺(tái)小程序開發(fā)搭建,肥鄉(xiāng)網(wǎng)站營(yíng)銷推廣歡迎肥鄉(xiāng)等地區(qū)企業(yè)咨詢

其實(shí)Python語言合并兩個(gè)或多個(gè)列表的方法非常簡(jiǎn)單,直接使用加號(hào)(+)即可。不過在很多場(chǎng)景下,并不太適合使用"+"。列表中的值由于某些原因是分散開的,或需要去重,或者正處于迭代中,所以本文將為讀者展示如果用多達(dá)12種方法合并兩個(gè)或多個(gè)列表。

方法1:宇宙第一加號(hào)大法這是最簡(jiǎn)單的合并Python列表的方法,代碼如下:

 
 
 
  1. list1 = [1, 2, 3]
  2. list2 = [4, 5, 6]
  3. result = list1 + list2
  4. # [1, 2, 3, 4, 5, 6]
  5. print(result)

這個(gè)方法不用多解釋,直接加就完了,既然加兩個(gè)列表可以,加10000個(gè)列表當(dāng)然也可以,或者放到循環(huán)里不斷累加。

方法2:自動(dòng)拆箱和裝箱的星號(hào)大法

從Python 3.5開始,星號(hào)(*)就有了特殊的用途,將一個(gè)列表拆開,或?qū)⒍鄠€(gè)值組裝成元組。如果將星號(hào)用作列表元素,并且這個(gè)列表元素也是一個(gè)列表的話,那么就會(huì)直接將列表中的值作為元素插入上一級(jí)的列表中,代碼如下:

 
 
 
  1. list1 = [1, 2, 3]
  2. list2 = [4, 5, 6]
  3. result = list1 + list2
  4. # [1, 2, 3, 4, 5, 6]
  5. print(result)

PS:雙星(**)可以拆裝字典,如果將單星和雙星作為函數(shù)的參數(shù),那么就是裝箱,可以將離散的值組裝成元組(單星)和字典(雙星),代碼如下:

 
 
 
  1. import itertools
  2. list1 = [1, 2, 3]
  3. list2 = [4, 5, 6]
  4. # 直接合并
  5. # [1, 2, 3, 4, 5, 6]
  6. result = [item for item in itertools.chain(list1, list2)]
  7. print(result)
  8. # 合并兩個(gè)列表的同時(shí),每一個(gè)列表元素的值加1
  9. # [2, 3, 4, 5, 6, 7]
  10. result = [item + 1 for item in itertools.chain(list1, list2)]
  11. print(result)

方法3:可控合并,舍“迭代”其誰

前面兩種合并列表的方式固然比較簡(jiǎn)單,但問題是,只能做到簡(jiǎn)單的合并,如果要做更復(fù)雜的合并(如在合并的過程中加工特定的列表元素)就無法做到了。所以在這種情況下可以使用迭代的方式單獨(dú)處理每一個(gè)列表元素,我稱這種合并方式為可控合并,代碼如下:

 
 
 
  1. import itertools
  2. list1 = [1, 2, 3]
  3. list2 = [4, 5, 6]
  4. # 直接合并
  5. # [1, 2, 3, 4, 5, 6]
  6. result = [item for item in itertools.chain(list1, list2)]
  7. print(result)
  8. # 合并兩個(gè)列表的同時(shí),每一個(gè)列表元素的值加1
  9. # [2, 3, 4, 5, 6, 7]
  10. result = [item + 1 for item in itertools.chain(list1, list2)]
  11. print(result)

方法4:強(qiáng)行轉(zhuǎn)換的用處

通過chain類,可以將兩個(gè)或多個(gè)列表變成一個(gè)chain對(duì)象,然后再將chain對(duì)象轉(zhuǎn)換為list對(duì)象,代碼如下:

 
 
 
  1. from itertools import chain
  2. list1 = [1, 2, 3]
  3. list2 = [4, 5, 6]
  4. result = list(chain(list1, list2))
  5. # [1, 2, 3, 4, 5, 6]
  6. print(result)

chain類構(gòu)造方法的原型如下:

 
 
 
  1. def __init__(self, *iterables)

顯而易見,構(gòu)造方法的iterables參數(shù)使用了單星(*),所以可以接收任意多個(gè)列表參數(shù),例如,chain(list1, list2, list3,list4,list5)是合法的,因此,本方法可以合并任意多個(gè)列表。

方法5:我不需要重復(fù)的值

有一種特殊的合并列表方式,就是去重,也就是說,如果合并的兩個(gè)或多個(gè)列表中有重復(fù)的值,那么只保留一個(gè)相同的值即可。其實(shí)就是將合并后的結(jié)果變成集合,因此,可以用集合來解決這個(gè)問題,代碼如下:

 
 
 
  1. list1 = [1, 2, 3]
  2. list2 = [4, 3, 6]
  3. result = list(set(list1 + list2))
  4. # [1, 2, 3, 4, 6]
  5. print(result)

這種合并列表的方式盡管使用了加號(hào)(+),但還使用set,所以應(yīng)該屬于一種新的合并方式,因?yàn)檫@種合并方式滿足了特殊的需求:去重。

方法6:生成器大法

前面的幾種方式都是使用了Python中的現(xiàn)成機(jī)制,現(xiàn)在來點(diǎn)復(fù)雜的:自定義轉(zhuǎn)換函數(shù)。

這種合并列表的方式涉及到如下幾種技術(shù):

1. 自定義Python函數(shù)

2. 單星(*)作為函數(shù)參數(shù)

3. Python生成器(Generator)

4. 類型轉(zhuǎn)換實(shí)現(xiàn)

代碼如下:

 
 
 
  1. list1 = [1, 2, 3]
  2. list2 = [4, 5, 6]
  3. list3 = [7, 8, 9]
  4. list4 = [10, 11, 12]
  5. list5 = ["hello", 20.1, True]
  6. # 合并函數(shù),也是一個(gè)生成器
  7. def merge(*iters):
  8.     for it in iters:
  9.         yield from it
  10. result = list(merge(list1, list2, 'abcd', [20, 21, 22],list3,list4,list5))
  11. # [1, 2, 3, 4, 5, 6, 'a', 'b', 'c', 'd', 20, 21, 22, 7, 8, 9, 10, 11, 12, 'hello', 20.1, True]
  12. print(result)

這段代碼的merge是一個(gè)生成器形式的合并函數(shù),而且使用了單星(*)作為參數(shù)類型,所以可以傳入任意多個(gè)列表。本例合并了7個(gè)列表。其中'abcd'是一個(gè)字符串形式的列表,每一個(gè)列表元素是單個(gè)字符。

方法7:又看到for in表達(dá)式了

Python簡(jiǎn)直將for做到了極致,提供了for in表達(dá)式。要注意,這是表達(dá)式,不是語句。所以可以用在其他表達(dá)式中,例如,用for in表達(dá)式生成一個(gè)列表,代碼如下:

 
 
 
  1. list1 = [1, 2, 3]
  2. list2 = [4, 5, 6]
  3. # 如果是字母,會(huì)輸出對(duì)應(yīng)的ASCII
  4. result = [ord(item) if str(item).isalpha() else item for item in (list1 + list2 + list('abcd') + [20, 21, 22])]
  5. # [1, 2, 3, 4, 5, 6, 97, 98, 99, 100, 20, 21, 22]
  6. print(result)

這種方式適合于復(fù)制一個(gè)新的列表,而且可以在合并的過程中修改特定的列表值。

方法8:自身也可以被修改

在合并列表時(shí),如果希望一個(gè)列表本身被修改,那么可以用這種方法。例如,合并A和B兩個(gè)列表后,A本身變成了最終的修改結(jié)果,也就是說,將B追加到A的后面。實(shí)現(xiàn)代碼如下:

 
 
 
  1. list1 = [1, 2, 3]
  2. list2 = [4, 5, 6]
  3. result = []
  4. result.extend(list1)
  5. result.extend(list2)
  6. # [1, 2, 3, 4, 5, 6]
  7. print(result)
  8. # [1, 2, 3, 4, 5, 6]
  9. list1.extend(list2)
  10. print(list1)

如果希望不修改參與合并的列表,那么可以定義一個(gè)空的列表。

方法9:Python函數(shù)庫是個(gè)好東西,到處都是寶藏

Python有一個(gè)非常龐大的函數(shù)庫,其中不乏用于合并列表的函數(shù),其中operator模塊中的add函數(shù)就是其中之一,其實(shí)add內(nèi)部使用了加號(hào)(+)合并列表,不過這也應(yīng)該算是一種方法,因?yàn)橐院骯dd函數(shù)可能會(huì)使用其他的方式合并列表。代碼如下:

 
 
 
  1. import operator
  2. list1 = [1, 2, 3]
  3. list2 = [4, 5, 6]
  4. result = operator.add(list1, list2)
  5. # [1, 2, 3, 4, 5, 6]
  6. print(result)

方法10:遠(yuǎn)在天邊,近在眼前

前面介紹了一堆用于合并列表的API,其實(shí)列表類(list)本身就有一個(gè)__add__方法,用于合并兩個(gè)列表,代碼如下:

 
 
 
  1. list1 = [1,2,3]
  2. list2 = [4,5,6]
  3. result = list.__add__(list1, list2)
  4. # [1, 2, 3, 4, 5, 6]
  5. print(result)

方法11:來個(gè)最傳統(tǒng)的方式介紹了這么多合并列表的方式,其實(shí)最傳統(tǒng)的還是一個(gè)元素一個(gè)元素添加,也就是列表的append方法。那么可能很多同學(xué)要問,有這么多好的方式,為啥要一個(gè)元素一個(gè)元素添加呢?豈不是影響效率?其實(shí)這也要看情況。例如,在一些場(chǎng)景,列表的值已經(jīng)被拆開了(為了處理其他的業(yè)務(wù)),那么就順道使用append方法挨個(gè)添加了,反正已經(jīng)被拆開了,不加白不加。

實(shí)現(xiàn)代碼如下:

 
 
 
  1. list1 = [1,2,3]
  2. list2 = [4,5,6]
  3. result = []
  4. for elem in list1:
  5.     result.append(elem)
  6. for elem in list2:
  7.     result.append(elem)
  8. # [1, 2, 3, 4, 5, 6]
  9. print(result)

方法12:合并方式不夠,外援來湊

其實(shí)Python中合并列表的方式也就這么多,好像只有11種,前面都說了,有12種,為了湊夠12種,這里請(qǐng)了一個(gè)外援,這就是NumPy,這個(gè)庫主要用于科學(xué)計(jì)算,對(duì)數(shù)據(jù)的處理比較強(qiáng)大,用NumPy合并Python列表的代碼如下:

 
 
 
  1. import numpy
  2. list1 = [1,2,3]
  3. list2 = [4,5,6]
  4. result = numpy.concatenate([list1,list2]).tolist()
  5. print(result)

由于numpy.concatenate函數(shù)返回了numpy.ndarray類型,所以要得到Python列表對(duì)象,還需要使用tolist方法進(jìn)行轉(zhuǎn)換。NumPy是第三方庫,所以需要使用下面的命令進(jìn)行安裝。

 
 
 
  1. pip install numpy

文章題目:合并Python列表的魔幻12法
本文鏈接:http://www.5511xx.com/article/dhdhiei.html