循环遍历字符串和元组列表并附加唯一组合

时间:2012-11-14 18:40:32

标签: python string list loops tuples

我一直在研究这个循环问题。如何在包含单个字符串和元组的列表中循环,同时将元组附加到前面的字符串?例如:

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
如果我的漫步太混乱,我道歉。我很欣赏任何见解。

1 个答案:

答案 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'))]