oll*_*wer 16 python tuples list flatten
我有一个列表的以下元素,列表是100个元素长.
[(50, (2.7387451803816479e-13, 219))]
Run Code Online (Sandbox Code Playgroud)
如何将每个元素转换为这样?
[(50, 2.7387451803816479e-13, 219)]
Run Code Online (Sandbox Code Playgroud)
use*_*ica 14
[(a, b, c) for a, (b, c) in l]
Run Code Online (Sandbox Code Playgroud)
元组打包和拆包解决了这个问题.
您可以使用以下函数并将其循环应用到列表中的每个元素。
def flatten(data):
if isinstance(data, tuple):
if len(data) == 0:
return ()
else:
return flatten(data[0]) + flatten(data[1:])
else:
return (data,)
Run Code Online (Sandbox Code Playgroud)
怎么运行的:
这个解决方案的好处是:
该代码稍微改编自以下来源:
https://mail.python.org/pipermail/tutor/2001-April/005025.html
希望它对某人有帮助:)
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)]
Run Code Online (Sandbox Code Playgroud)
如果您有一个嵌套的元组用于记录并包含许多您想要展平的元素,这可能会很有用。