2017-04-08 79 views
0

你好,我剛剛開始學習python。如何獲取每個可能的列表案例總和

我想在一個列表

if [a,b,c,d,e] 

[aa, 'ab', 'ac', 'ad', 'ae', 'ba', 'bb', 'bc', 'bd', 'be'] and so on 

創建數據的所有情況,但我無法弄清楚如何做到這一點。

這是據我可以走:

def number_of_cases(list_data): 

    mix_data=[] 
    list_data = list(map(str,list_data)) 
    for data in list_data: 
     mix_data.append(data+list_data[0]) 
     mix_data.append(data+list_data[1]) 
     mix_data.append(data+list_data[2]) 

我不能做list[0 1 2 3 4]去,因爲我不知道該列表要去多久是做....

回答

2

考慮使用itertools.product?給定兩個列表,它將創建一個列表中的項目和另一個列表中項目的所有成對組合,作爲元組序列。然後你將每個元組粘合在一起。

from itertools import product 
data = ['a', 'b', 'c', 'd'] 
pairs = [''.join(x) for x in product(data, data)] 
print(pairs) 
1

@ AlexL的answerproduct是要走的路。這是你的代碼的修改版本與期望的結果:

mix_data=[] 
list_data = ['a', 'b', 'c', 'd', 'e'] 
list_data = list(map(str,list_data)) 
for data1 in list_data: 
    for data2 in list_data: 
     mix_data.append(data1+data2) 
print(mix_data) 

它輸出:

[ 'AA', 'AB', 'AC', '廣告', 'AE',「 ba','bb','bc','bd','be','ca', 'cb','cc','cd','ce','da','db','dc 」, 'DD', '德', 'EA', 'EB', 'EC', '編', 'EE']

+0

謝謝你這麼多 –

0

像@Alex大號說,你可以使用itertools或者你也可以使用這些簡單的兩個循環。

list1 = ['a', 'b', 'c', 'd'] 
nlist=[] 
for x in list1:  
for y in list1: 
    nlist+=[x+y] 
print(nlist) 
+0

謝謝你,我wasn't尋找導入工具我需要這樣簡單的表格 –

3

或者你可以做一個平面列表理解:

data = list('abcd') 
pairs = [x+y for x in data for y in data] 
pairs 
# ['aa', 'ab', 'ac', 'ad', 'ba', 'bb', 'bc', 'bd', 'ca', 'cb', 'cc', 'cd', 'da', 'db', 'dc', 'dd'] 

順便說一下,在這個特殊的例子它甚至沒有必要進行第一個列表

pairs = [x+y for x in 'abcd' for y in 'abcd'] 

也適用。

0

我的第一個建議是不正確的,如下所示。這個答案仍然正確。

一個可愛又簡潔的做法是使用列表解析和f-字符串(f-字符串只在python 3.6和up中)。 EG:

chars = 'abcde' 
pairs = ['{x}{y}' for x in chars for y in chars] 

如果沒有F-字符串等效會是這樣:

chars = 'abcde' 
pairs = ([f'%s%s' % (x, y) for x in chars for y in chars]) 

>>>print(pairs) ['aa', 'ab', 'ac', 'ad', 'ae', 'ba', 'bb', 'bc', 'bd', 'be', 'ca', 'cb', 'cc', 'cd', 'ce', 'da', 'db', 'dc', 'dd', 'de', 'ea', 'eb', 'ec', 'ed', 'ee']

+1

你看過其他答案嗎?如果你不這麼想,爲什麼'itertools.product'和'itertools.combinations_with_replacement'都應該給出相同的結果?提示:嘗試運行第二條建議,並將其真實輸出與您發佈的內容進行比較;-) –

+0

啊,你說得對。我們正在討論排列組合,而不是組合。提示:說'提示:'是非常被動的侵略性;) –

+0

是嗎?在這種情況下,我表示歉意。 –

相關問題