展平列表和字符串

时间:2015-12-07 21:37:46

标签: python

我知道如何轻松压缩列表列表。 例如:

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是一个列表,它是一个字符串。

是否有一种简单的方法可以压缩包含列表和字符串的列表?

1 个答案:

答案 0 :(得分:1)

您可以将reducelambda功能

一起使用
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

所强调的那样