2012-12-28 23 views
0

我有一個消耗我的大腦的問題。假設變量I存儲一個序列,變量II存儲另一個序列,變量III存儲另一個序列。變量1將表示數字1,接下來的2和接下來的3;然後我有另外一個關鍵變量,這三個序列的隨機字符。給出這個事實,我可以很容易地在相應的數字中翻譯這個關鍵變量的字符。在這個例子中,x = 'afh'比,說的是x = '123'是一樣的,因爲A OR B OR C = 1,等等。從序列中追加所有可能的數字

現在到了最複雜的部分:

當關鍵變量x被轉換成數字,一個個字符分別,我也可以隨意從結果返回字符。例如:x = '123',那麼我可以返回一個列表,如['a','e','f']['b','d','i'],特別是如果我使用random.choice()。從這裏,我不知道如何做什麼是:

我怎麼能追加到列表中所有可能的變量從變量I,II,III。例如:

['adg','beh','cfi','aei','ceg',...] 

我知道如何打印不休隨意組合,但在這種情況下,我得到重複,我不想讓他們。我想追加到列表中,確切地說明了I,II和III之間的所有可能的變體,因爲當它們被翻譯成數字時,我可以從對應序列中返回任何字符。那麼,我希望我的例子是自我解釋的。我非常感謝你的關注!

I = 'abc' # 1 
II = 'def' # 2 
III = 'ghi' # 3 
x = 'afh' # Random possibility: It could be an input. 
L = [] 
LL = [] 

for i in range(len(x)): 
    if x[i] in I: 
     L.append(1) 
    if x[i] in II: 
     L.append(2) 
    if x[i] in III: 
     L.append(3) 

for i in range(len(L)): # Here lies the mistery... 
    if L[i] == 1: 
     LL.append(I) 
    if L[i] == 2: 
     LL.append(II) 
    if L[i] == 3: 
     LL.append(III) 

print L 
print LL 

輸出是:

[1, 2, 3] 

['abc', 'def', 'ghi'] 
+0

更多的例子嗎?我理解從x到'[1,2,3]'的翻譯,反之亦然。 – CppLearner

回答

1

這是我會怎麼重寫代碼。如果像你這樣的陳述是很大的代碼味道,那就太長了。我把序列放入一個元組中,並使用一個單一的循環。我也用列表理解替換了第二個循環。順便說一下,如果你像一個明智的人一樣使用了基於零的索引,那麼你也可以簡化索引。

I = 'abc' # 1 
II = 'def' # 2 
III = 'ghi' # 3 
x = 'afh' # Random possibility: It could be an input. 
L = [] 
LL = [] 

lists = I, II, III 

for c in x: 
    for i, seq in enumerate(lists): 
     if c in seq: 
      L.append(i+1) 

LL = [lists[i-1] for i in L] 

print L 
print LL 

此外,一定要檢查出itertools模塊,特別是product功能。目前尚不清楚您的意思,但產品會爲您提供序列列表中每個項目的所有組合。

+0

非常感謝!我會檢查出來:)。我一直試圖做到這一點,而不是隨時導入任何東西,真的很令人費解。 –

+0

非常有趣!我會花一些時間來完全理解你的重寫我的代碼的高級方式,非常好!謝謝!我會檢查確定.. –

0

非常感謝你銻!答案是itertools的產品()。與它的代碼是血淋淋的更爲簡單:

from itertools import * 

I = 'abc' # 1 
II = 'def' # 2 
III = 'ghi' # 3 

IV = product(I,II,III) 

for i in IV: 
    print i 

和輸出正是我想要的,每一個可能的組合:「一切可能性」

('a', 'd', 'g') 
('a', 'd', 'h') 
('a', 'd', 'i') 
('a', 'e', 'g') 
('a', 'e', 'h') 
('a', 'e', 'i') 
('a', 'f', 'g') 
('a', 'f', 'h') 
('a', 'f', 'i') 
('b', 'd', 'g') 
('b', 'd', 'h') 
('b', 'd', 'i') 
('b', 'e', 'g') 
('b', 'e', 'h') 
('b', 'e', 'i') 
('b', 'f', 'g') 
('b', 'f', 'h') 
('b', 'f', 'i') 
('c', 'd', 'g') 
('c', 'd', 'h') 
('c', 'd', 'i') 
('c', 'e', 'g') 
('c', 'e', 'h') 
('c', 'e', 'i') 
('c', 'f', 'g') 
('c', 'f', 'h') 
('c', 'f', 'i') 
0
python 3.2 


    [(i,v,c) for i in I for v in II for c in III] 
相關問題