我知道如何轻松压缩列表列表。 例如:
my_list = [['abc'],[1,2,3]]
list(itertools.chain.from_iterable(my_list))
但是如果
my_list = ['abs',[1,2,3]]
list(itertools.chain.from_iterable(my_list))
我得到['a','b','c',1,2,3]
,而我想要['abc', 1,2,3]
我可以通过为原始列表中的第二个元素运行for loop
来解决这个问题,但这似乎是一种混乱的方式,如果你不知道哪个元素是一个混乱的话list是一个列表,它是一个字符串。
是否有一种简单的方法可以压缩包含列表和字符串的列表?
答案 0 :(得分:1)
您可以将reduce
与lambda
功能
l = lambda x,y: (x if isinstance(x,list) else [x]) + (y if isinstance(y,list) else [y])
reduce(l, my_list)
>>> my_list = [['abc'],[1,2,3]]
>>> reduce(l, my_list)
['abc', 1, 2, 3]
>>> my_list = ['abs',[1,2,3]]
>>> reduce(l, my_list)
['abs', 1, 2, 3]
通过这种方式,您可以将减少一份包含这些内容的列表中的部分内容。
它适用于您想要的列表中的所有列表。 例如:
>>> my_list = ['abs',[1,2,[3,4]]]
>>> tmp = reduce(l, my_list)
#tmp = ['abs', 1, 2, [3,4]] - Just run again
>>> reduce(l, tmp)
>>> ['abs', 1, 2, 3, 4]
应该注意到,这不是一种有效的方法,正如两位Alchemist
所强调的那样