我有一个列表元素,而且这个列表有100个元素。
[(50, (2.7387451803816479e-13, 219))]
我该如何将每个元素转换为这样的格式?
[(50, 2.7387451803816479e-13, 219)]
我有一个列表元素,而且这个列表有100个元素。
[(50, (2.7387451803816479e-13, 219))]
我该如何将每个元素转换为这样的格式?
[(50, 2.7387451803816479e-13, 219)]
[(a, b, c) for a, (b, c) in l]
元组打包和拆包解决了这个问题。
在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)]
def flatten(data):
if isinstance(data, tuple):
if len(data) == 0:
return ()
else:
return flatten(data[0]) + flatten(data[1:])
else:
return (data,)
工作原理:
这个解决方案的优点是:
这段代码略有改动,来自以下来源:
https://mail.python.org/pipermail/tutor/2001-April/005025.html
希望能对某些人有所帮助 :)
递归
和yield
扁平化元组的生成器。def flatten(data):
if isinstance(data, tuple):
for x in data:
yield from flatten(x)
else:
yield data
list
或tuple
,请使用list()
或tuple()
。list(flatten(nested_tuple))
tuple(flatten(nested_tuple))
yield from
替换为另一个循环。def flatten(data):
if isinstance(data, tuple):
for x in data:
for y in flatten(x):
yield y
else:
yield data
>>> 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)]
>> example = [(50, (2.7387451803816479e-13, 219))]
>>> [tuple(x[:1]) + (x[1]) for x in example]
[(50, 2.738745180381648e-13, 219)]
def flatten(args):
try:
iter(args)
final = []
for arg in args:
final += flatten(arg)
return tuple(final)
except TypeError:
return (args, )
flatten([1, 2, 3, 4]) # (1, 2, 3, 4)
flatten([1, [2, 3], 4]) # (1, 2, 3, 4)
flatten([1, [2, [3]], [[4]]]) # (1, 2, 3, 4)