私はこのようになりますタプルのリストがあります。これを行うには、最もPython的な方法は何Pythonでネストされたタプルのリストを平坦化する方法は?
[('a', 'b'), ('c', 'd'), ('e', 'f'), ('h', 'i')]
:
[('a', 'b'), ('c', 'd'), (('e', 'f'), ('h', 'i'))]
私はこれにそれを有効にすると?
私はこのようになりますタプルのリストがあります。これを行うには、最もPython的な方法は何Pythonでネストされたタプルのリストを平坦化する方法は?
[('a', 'b'), ('c', 'd'), ('e', 'f'), ('h', 'i')]
:
[('a', 'b'), ('c', 'd'), (('e', 'f'), ('h', 'i'))]
私はこれにそれを有効にすると?
一行、U
l = [('a', 'b'), ('c', 'd'), (('e', 'f'), ('h', 'i'))]
result = [z for y in (x if isinstance(x[0],tuple) else [x] for x in l) for z in y]
print(result)
利回り:
[('a', 'b'), ('c', 'd'), ('e', 'f'), ('h', 'i')]
要素はタプルのタプルでない場合、これは人為的にすべての仕事をして平坦化、その後、リストを作成しているリストの内包を歌います。
制限:1つの要素リストを作成しないように、(x for _ in range(1))
はジョブを実行することもできます(制限は1レベル以上は処理できません)。この場合、より複雑な/再帰的な解をコード化する必要があります。
これはもちろん、任意のネスティングを処理しません。 –
@MartijnPietersあなたの再帰的な解決策は、それを行うことができ、私のUVを持っている唯一の解決策です。 BTWは '(x for _ range(1)for)in' '' '[x]'リストの作成を避けるのに適していますか、それとも良い方法がありますか? –
値のタプルがある場合のみ、非平坦化にcanonical un-flatten recipeを調整します。
def flatten(l):
for el in l:
if isinstance(el, tuple) and any(isinstance(sub, tuple) for sub in el):
for sub in flatten(el):
yield sub
else:
yield el
はこれが唯一のタプルをアンラップし、その中に他のタプルが存在する場合にのみ:
>>> sample = [('a', 'b'), ('c', 'd'), (('e', 'f'), ('h', 'i'))]
>>> list(flatten(sample))
[('a', 'b'), ('c', 'd'), ('e', 'f'), ('h', 'i')]
1は、 -line溶液は、itertools.chain
を使用することになる。
>>> l = [('a', 'b'), ('c', 'd'), (('e', 'f'), ('h', 'i'))]
>>> from itertools import chain
>>> [*chain.from_iterable(x if isinstance(x[0], tuple) else [x] for x in l)]
[('a', 'b'), ('c', 'd'), ('e', 'f'), ('h', 'i')]
ここに同意します:これはもちろん、任意のネストを処理しません。 –
[不規則なリストのリストを作成する](https://stackoverflow.com/questions/2158395/flatten-an-irregular-list-of-lists) – GPhilo
重複しているとは思わない彼はペアを維持したいので、 – L3viathan
確かに、私はフラグを引っ込めました – GPhilo