0

私は今、このループの問題に少し取り組んでいます。前の文字列にタプルを追加しながら、単一の文字列とタプルを含むリストをループするにはどうすればよいですか? 例えば:

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

私のとりとめがあまりにも混乱している場合は、お詫び申し上げます。洞察に感謝します。

4

1 に答える 1

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'))]
于 2012-11-14T18:55:49.700 に答える