2012-11-14 112 views
0

我一直在研究這個循環問題。如何循環遍歷包含單個字符串和元組的列表,同時將元組附加到前面的字符串?例如:循環訪問字符串和元組列表並添加獨特的組合

gen = ['A', ('x', 'y'), ('t', 'u'), 'B', ('y', 't'), 'B', ('a', 'z')] 
fam = ['A', 'B'] 

幸運fam還包含內gen imbeded單一字符串。最後,我想要以下內容。

result = [('A',('x','y')), ('A', ('t', 'u')), ('B', ('y', 't')), ('B', ('a', 'z')) 

請注意,單個字符串後面的元組(例如'A')被附加到它。

如何通過gen循環以便元組在其之前添加單個字符串?到目前爲止,我擁有如下內容。其中追加gen中的所有組合,然後是一些。我愚蠢地創建了一個重複gen,即gen2來幫助循環,無濟於事。

gen = ['A', ('x', 'y'), ('t', 'u'), 'B', ('y', 't'), 'B', ('a', 'z')] 
fam = ['A', 'B'] 
gen2 = ['A', ('x', 'y'), ('t', 'u'), 'B', ('y', 't'), 'B', ('a', 'z')] 

result = [] 
for f in fam: 
    for g in gen: 
     if len(g) == 2: 
      for g2 in gen2: 
       if g2 == f: 
        result.append((g2,f)) 
print result 

我很抱歉,如果我的漫步太混亂。我感謝任何見解。

回答

5

如果你跟蹤你遇到的最後一個字符串,你可以在一個循環中完成而不使用fam。它只適用於gen的第一個元素是字符串的情況。

gen = ['A', ('x', 'y'), ('t', 'u'), 'B', ('y', 't'), 'B', ('a', 'z')] 

result = [] 
lastStringSeen = None 
for i in gen: 
    if isinstance(i, str): 
     lastStringSeen = i 
    else: #must be a tuple 
     result.append((lastStringSeen, i)) 
print result 

輸出:

[('A', ('x', 'y')), ('A', ('t', 'u')), ('B', ('y', 't')), ('B', ('a', 'z'))] 
+0

謝謝@Kevin!是的,'gen'的第一個元素恰好是一個字符串,所以你的代碼肯定適合我。我從來沒有使用'isinstance'函數,我將不得不更多地瞭解它。 – hylaeus