I는 다음과 같습니다 그 튜플의 목록을 가지고 :파이썬에서 중첩 된 튜플 목록을 평탄하게 만드는 방법은 무엇입니까?
[('a', 'b'), ('c', 'd'), (('e', 'f'), ('h', 'i'))]
나는이로 돌려하려면 :
[('a', 'b'), ('c', 'd'), ('e', 'f'), ('h', 'i')]
이 작업을 수행 할 수있는 가장 파이썬 방법은 무엇입니까?
I는 다음과 같습니다 그 튜플의 목록을 가지고 :파이썬에서 중첩 된 튜플 목록을 평탄하게 만드는 방법은 무엇입니까?
[('a', 'b'), ('c', 'd'), (('e', 'f'), ('h', 'i'))]
나는이로 돌려하려면 :
[('a', 'b'), ('c', 'd'), ('e', 'f'), ('h', 'i')]
이 작업을 수행 할 수있는 가장 파이썬 방법은 무엇입니까?
한 줄,
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')]
이 인위적 목록을 만드는 지능형리스트를 노래. 단일 요소 목록을 만들지 않으려면 [x]
, (x for _ in range(1))
도 작업을 수행 할 수 있습니다 (clunky로 보일지라도).
제한 : 둘 이상의 중첩 수준을 처리하지 못합니다. 어떤 경우에는 더 복잡한/재귀 적 솔루션을 코딩해야합니다.
이것은 임의의 중첩을 처리하지 않습니다. –
@MartijnPieters 당신의 재귀 솔루션은 그 일을 할 수있는 유일한 솔루션이며, 자외선을 가지고 있습니다. BTW는'(x for _ range (1)에 대해)'''[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')]
하나가 - 라인 솔루션을 사용하는 것입니다 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')]
여기 Ditto here : 이것은 임의의 중첩을 처리하지 않습니다. –
[불규칙 목록의 목록을 단순화] (https://stackoverflow.com/questions/2158395/flatten-an-irregular-list-of-lists) – GPhilo
중복되는 것으로 생각하지 않습니다. , 그는 쌍을 유지하고 싶어하기 때문에 – L3viathan
실제로, 나는 깃발을 뒤로했다 – GPhilo