如何从存储在另一个列表中的列表解包值



我有一个包含一些元素的列表,一个lit和一些其他元素,比如[a, b, [c, d, e], f, g],我想得到[a, b, c, d, e, f, g]。我尝试使用我不熟悉的itertools,但我没有成功:

from itertools import chain
a = 1
b = 2
c = [3, 4, 5]
d = 6
e = 7
list(chain(a, b, c, d, e))

抛出TypeError

任何帮助都是感激的!

你可以从一个由列表和整型数混合的列表转换成一个严格由列表组成的列表,然后应用itertools链。

from itertools import chain
l1= [1,2,[3,4,5],6,7]
l2 = list(chain.from_iterable(i if isinstance(i, list) else [i] for i in l1))

或者检查类型,然后扩展或追加新列表;

l1= [1,2,[3,4,5],6,7]    
l2 = []
for i in l1:
l2.extend(i) if isinstance(i, list) else l2.append(i)

如果您想要一个接受任意数量参数的函数,您可以使用下面的解决方案

首先,我将所有输入参数转换为列表arg if isinstance(arg, list) else [arg],然后我使用一个"技巧"。与求和函数平面化列表。

def unpacker(*args):
return sum([arg if isinstance(arg, list) else [arg] for arg in args], [])

例子
a = 1
b = 2
c = [3, 4, 5]
d = 6
e = 7
print(unpacker(a, b, c, d, e))
>>> [1, 2, 3, 4, 5, 6, 7]

最新更新