我一直在研究这个循环问题。如何在包含单个字符串和元组的列表中循环,同时将元组附加到前面的字符串?例如:
gen = ['A', ('x', 'y'), ('t', 'u'), 'B', ('y', 't'), 'B', ('a', 'z')]
fam = ['A', 'B']
幸运的是,fam
还包含gen
内嵌入的单个字符串。最后我想要以下内容。
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
如果我的漫步太混乱,我道歉。我很欣赏任何见解。
答案 0 :(得分: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'))]