2015-02-08 42 views
1

我試圖將每個可能的兩位數組合附加到列表中每個字符串的末尾。將itertools.product()結果附加到Python中的變量中

這些字符串每個都是8個字符,數字應該替換第7個和第8個字符。

我使用itertools.product()生成這些兩位數的組合,但我不知道如何將這些組合添加到字符串。我嘗試使用join(),但是在兩個數字中的每一個之間夾着字符串。

我的下一次嘗試在下方,但不起作用,因爲您的無法連接'str''itertools.product'對象

for p in passwords: 
    candidates += list(p[:6] + itertools.product(string.digits, string.digits)) 

所以,密碼看起來像這樣

['american', 'japanese'] 

和輸出應該是

['americ00', 'americ01', 'americ02', …, 'japane98', 'japane99'] 
+1

'l'和你的'list'是什麼樣的?你想在每次迭代中將其附加到候選人中去做什麼? – 2015-02-08 18:05:53

+0

該列表包含候選密碼,所以每個只是一個八字符的字符串。我希望將這些新的字符/數字組合添加到候選人列表中。 – Josephus 2015-02-08 18:09:47

+0

請發佈* input *數據的最簡單示例和預期結果。如果'''list'''包含一個字符串,那麼結果中會有多少個字符串?請避免使用Python關鍵字和函數名稱作爲變量的名稱。 – wwii 2015-02-08 18:13:05

回答

2

既然你只是計算,該產品是沒有必要這可以簡寫爲:

lst = ['american', 'japanese'] 
candidates = ['{}{:02d}'.format(e[:6], i) for e in lst for i in range(100)] 

這是alanalgous到環路

candidates = [] 
for e in lst: 
    for i in range(100): 
     candidates.append('{}{:02d}'.format(e[:6], i)) 

如果真的要的產品的原因之一或另一個:

['{}{}{}'.format(e[:6], i, j) for e in lst for i, j in itertools.product(string.digits, string.digits)] 

這也可以概括爲一個產品有更多的參數

[e[:6] + ''.join(pr) for e in lst for pr in itertools.product(string.digits, string.digits, string.digits)] 
+1

我覺得你有太多的string.digits,你也可以在產品(數字,重複= 2)中使用重複'[ele [:6] +「」.ele(tup) – 2015-02-08 18:41:26

1

如果我理解這個權利,你要創建的每個密碼的候選人名單。在這種情況下,你可以使用類似以下,以替代只計算一次,所有的候選人都逗號分隔值:

import itertools 
import string 

candidates = [] 
replacements = ['%s%s' % (x, y) for x, y in itertools.product(string.digits, string.digits)] 

list_of_l = ['american', 'japanese'] 
for l in list_of_l: 
    candidates += [l[:6] + repl for repl in replacements] 

>>> print candidates 
['americ00', 'americ01', 'americ02', 'americ03', 'americ04', 'americ05', 'americ06', 'americ07', 'americ08', 'americ09', 'americ10', 
'americ11', 'americ12', 'americ13', 'americ14', 'americ15', 'americ16', 'americ17', 'americ18', 'americ19', 'americ20', 'americ21', 
'americ22', 'americ23', 'americ24', 'americ25', 'americ26', 'americ27', 'americ28', 'americ29', 'americ30', 'americ31', 'americ32', 
'americ33', 'americ34', 'americ35', 'americ36', 'americ37', 'americ38', 'americ39', 'americ40', 'americ41', 'americ42', 'americ43', 
'americ44', 'americ45', 'americ46', 'americ47', 'americ48', 'americ49', 'americ50', 'americ51', 'americ52', 'americ53', 'americ54', 
'americ55', 'americ56', 'americ57', 'americ58', 'americ59', 'americ60', 'americ61', 'americ62', 'americ63', 'americ64', 'americ65', 
'americ66', 'americ67', 'americ68', 'americ69', 'americ70', 'americ71', 'americ72', 'americ73', 'americ74', 'americ75', 'americ76', 
'americ77', 'americ78', 'americ79', 'americ80', 'americ81', 'americ82', 'americ83', 'americ84', 'americ85', 'americ86', 'americ87', 
'americ88', 'americ89', 'americ90', 'americ91', 'americ92', 'americ93', 'americ94', 'americ95', 'americ96', 'americ97', 'americ98', 
'americ99', 'japane00', 'japane01', 'japane02', 'japane03', 'japane04', 'japane05', 'japane06', 'japane07', 'japane08', 'japane09', 
'japane10', 'japane11', 'japane12', 'japane13', 'japane14', 'japane15', 'japane16', 'japane17', 'japane18', 'japane19', 'japane20', 
'japane21', 'japane22', 'japane23', 'japane24', 'japane25', 'japane26', 'japane27', 'japane28', 'japane29', 'japane30', 'japane31', 
'japane32', 'japane33', 'japane34', 'japane35', 'japane36', 'japane37', 'japane38', 'japane39', 'japane40', 'japane41', 'japane42', 
'japane43', 'japane44', 'japane45', 'japane46', 'japane47', 'japane48', 'japane49', 'japane50', 'japane51', 'japane52', 'japane53', 
'japane54', 'japane55', 'japane56', 'japane57', 'japane58', 'japane59', 'japane60', 'japane61', 'japane62', 'japane63', 'japane64', 
'japane65', 'japane66', 'japane67', 'japane68', 'japane69', 'japane70', 'japane71', 'japane72', 'japane73', 'japane74', 'japane75', 
'japane76', 'japane77', 'japane78', 'japane79', 'japane80', 'japane81', 'japane82', 'japane83', 'japane84', 'japane85', 'japane86', 
'japane87', 'japane88', 'japane89', 'japane90', 'japane91', 'japane92', 'japane93', 'japane94', 'japane95', 'japane96', 'japane97', 
'japane98', 'japane99'] 

注意list是一個Python內建的,所以不建議使用它作爲一個變量名,因此我用list_of_l來區分。