我想做这样的事情:
Input: [3, 4, 1, 2]
Output: ["3", "", "", "4", "", "", "1", "", "", "2", "", ""]
我知道
x = [3, 4, 1, 2]
[str(i) for i in x]
将生成没有额外空字符串的列表。我的问题是,是否有一种简单的方法可以让Python继续前进,并为每个输入项创建3个输出项。如果没有,我当然可以写一个循环...
答案 0 :(得分:5)
列表推导中的双循环行为就像map
+ chain
一样,可以使用:
[j for i in x for j in [str(i), "", ""]]
# ['3', '', '', '4', '', '', '1', '', '', '2', '', '']
使用map
和chain
语法,您可以执行以下操作:
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.chain
和zip
作为:
>>> 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', '', '']