Mam następujący element listy, a lista ma 100 elementów.Jak spłaszczyć krotkę w pytonie
[(50, (2.7387451803816479e-13, 219))]
Jak przekonwertować każdy element, aby wyglądał tak?
[(50, 2.7387451803816479e-13, 219)]
Mam następujący element listy, a lista ma 100 elementów.Jak spłaszczyć krotkę w pytonie
[(50, (2.7387451803816479e-13, 219))]
Jak przekonwertować każdy element, aby wyglądał tak?
[(50, 2.7387451803816479e-13, 219)]
[(a, b, c) for a, (b, c) in l]
Tuple packing and unpacking rozwiązuje problem.
nowego w Pythonie 3.5 z dodatkowym krotka rozpakowaniu wprowadzony w PEP 448, można użyć wyrażenia wystąpił w literały krotka taki sposób, że można użyć
>>> l = [(50, (2.7387451803816479e-13, 219)), (40, (3.4587451803816479e-13, 220))]
>>> [(a, *rest) for a, rest in l]
[(50, 2.738745180381648e-13, 219), (40, 3.458745180381648e-13, 220)]
Może to być przydatne, jeśli miał zagnieżdżone krotki używany rekordu - z wieloma elementami, które chciałbyś spłaszczyć.
można uzyskać wynik w ten sposób
>> example = [(50, (2.7387451803816479e-13, 219))]
>>> [tuple(x[:1]) + (x[1]) for x in example]
[(50, 2.738745180381648e-13, 219)]
Python 2.7 kompatybilny sposób do tego, co sugeruje, Mitch dla Pythona 3.5.
>>> example = [(50, (2.7387451803816479e-13, 219)),
(100, (3.7387451803816479e-13, 218))]
>>> [(lambda *x: x)(k, *r) for k, r in example]
[(50, 2.738745180381648e-13, 219), (100, 3.7387451803816477e-13, 218)]
Zaletą tej metody jest to, że nie trzeba, aby znaleźć nazwę zmiennej dla każdej wartości wewnętrznej krotki spłaszczania jak w przyjętym odpowiedź. Jeśli są dwa lub trzy elementy, nie stanowi to problemu, ale wyobraź sobie, że są wartości dziesiętne lub więcej ...
Twoja osoba może użyć poniższej funkcji i zastosować ją w pętli do każdego elementu na liście.
import type
def flatten(T):
if type(T) != types.TupleType: return (T,)
elif len(T) == 0: return()
else: return flatten(T[0]) + flatten(T[1:])
Jak to działa:
Dobrą rzeczą w tym roztworze wynosi:
Kod jest nieznacznie przystosowane od następującego źródła:
https://mail.python.org/pipermail/tutor/2001-April/005025.html
Mam nadzieję, że ktoś pomaga :)
W jaki sposób link w odpowiedzi pomaga rozwiązać ten problem? – GreenAsJade
Działa to, gdy znasz strukturę krotki, ale czasami powodem, dla którego należy ją spłaszczyć, jest struktura nieznana. na przykład np.where może zwrócić krotkę z jedną wartością lub krotką z listą wartości, w którym to przypadku krotka musi być dostępna inaczej. Jak można obsłużyć tę sytuację? – DanGoodrick
@DanGoodrick: np.where nie robi tego. Krotka nigdy nie zawiera listy; zawsze jest krotką numpy tablic, a poza przypadkiem dziwnych krawędzi z 0-wymiarowymi tablicami, liczba tablic jest zawsze równa wymiarowi tablicy wejściowej. W różnych przypadkach nie ma potrzeby uzyskiwania dostępu do krotki, a spłaszczenie jej nie ma większego sensu. – user2357112