通过理解

时间:2016-12-15 00:35:22

标签: python list list-comprehension

我想做这样的事情:

Input: [3, 4, 1, 2]
Output:  ["3", "", "", "4", "", "", "1", "", "", "2", "", ""]

我知道

x = [3, 4, 1, 2]
[str(i) for i in x]

将生成没有额外空字符串的列表。我的问题是,是否有一种简单的方法可以让Python继续前进,并为每个输入项创建3个输出项。如果没有,我当然可以写一个循环...

3 个答案:

答案 0 :(得分:5)

列表推导中的双循环行为就像map + chain一样,可以使用:

[j for i in x for j in [str(i), "", ""]]
# ['3', '', '', '4', '', '', '1', '', '', '2', '', '']

使用mapchain语法,您可以执行以下操作:

from itertools import chain
list(chain.from_iterable([str(i), "", ""] for i in x))
# ['3', '', '', '4', '', '', '1', '', '', '2', '', '']

答案 1 :(得分:1)

您也可以使用zip list comprehension 来实现此目的:

>>> my_list = [3, 4, 1, 2]
>>> empty_list = [""] * len(my_list)

>>> [i for z in zip(my_list, empty_list, empty_list) for i in z]
[3, '', '', 4, '', '', 1, '', '', 2, '', '']

或使用itertools.chainzip作为:

>>> from itertools import chain

>>> list(chain(*zip(my_list, empty_list, empty_list)))
[3, '', '', 4, '', '', 1, '', '', 2, '', '']

答案 2 :(得分:0)

你仍然可以使用列表理解,但是产生三个字符串的块,然后将它们连接起来:

sum([[str(i), "", ""] for i in x], [])
# ['3', '', '', '4', '', '', '1', '', '', '2', '', '']