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

hyl*_*eus 0 python string loops tuples list

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

gen = ['A', ('x', 'y'), ('t', 'u'), 'B', ('y', 't'), 'B', ('a', 'z')]
fam = ['A', 'B']
Run Code Online (Sandbox Code Playgroud)

幸运的是,fam还包含内置的单个字符串gen.最后我想要以下内容.

result = [('A',('x','y')), ('A', ('t', 'u')), ('B', ('y', 't')), ('B', ('a', 'z'))
Run Code Online (Sandbox Code Playgroud)

请注意,单个字符串后面的元组(例如"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
Run Code Online (Sandbox Code Playgroud)

如果我的漫步太混乱,我道歉.我很欣赏任何见解.

Kev*_*vin 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
Run Code Online (Sandbox Code Playgroud)

输出:

[('A', ('x', 'y')), ('A', ('t', 'u')), ('B', ('y', 't')), ('B', ('a', 'z'))]
Run Code Online (Sandbox Code Playgroud)