我有以下列表元素,列表長度爲100個元素。如何在python中壓扁元組
[(50, (2.7387451803816479e-13, 219))]
如何將每個元素轉換爲這樣的樣子?
[(50, 2.7387451803816479e-13, 219)]
我有以下列表元素,列表長度爲100個元素。如何在python中壓扁元組
[(50, (2.7387451803816479e-13, 219))]
如何將每個元素轉換爲這樣的樣子?
[(50, 2.7387451803816479e-13, 219)]
[(a, b, c) for a, (b, c) in l]
Tuple packing and unpacking解決了這個問題。
新的Python 3.5的附加元組PEP 448拆包介紹,您可以使用星號的表達式元組文字,這樣你可以使用
>>> 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)]
這可能是有用的,如果你有使用記錄嵌套元組與許多你想要扁平化的元素保持一致。
您可以用這種方式
>> example = [(50, (2.7387451803816479e-13, 219))]
>>> [tuple(x[:1]) + (x[1]) for x in example]
[(50, 2.738745180381648e-13, 219)]
一個Python 2.7兼容的方式做什麼米奇提出的Python 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)]
這種方法的好處是,你不必爲內部元組拼合像接受的答案的每個值找到一個變量名。如果有兩個或三個項目,這不是一個問題,但想象有十分之一的值或更多......
您可以使用以下函數並將其應用於循環中的每個元素。
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:])
它是如何工作的:
在這個解決方案的好處是:
代碼稍微從以下源,其適於:
https://mail.python.org/pipermail/tutor/2001-April/005025.html
希望它可以幫助別人:)
答案中的鏈接到底如何幫助解決這個問題? – GreenAsJade
當你知道元組結構時,它可以工作,但有時它需要被平坦化的原因是因爲結構是未知的。例如np.where可以返回一個具有單值的元組或者具有值列表的元組,在這種情況下,元組需要以不同的方式訪問。這種情況如何處理? – DanGoodrick
@DanGoodrick:np.where不這樣做。該元組從不包含列表;它總是一個numpy數組的元組,除了具有0維數組的奇怪邊緣情況外,數組的數量總是等於輸入數組的維數。在不同的情況下,不需要以不同的方式訪問元組,而將其扁平化沒有多大意義。 – user2357112