更改列表长度我想要做这样的事情:修真
Input: [3, 4, 1, 2]
Output: ["3", "", "", "4", "", "", "1", "", "", "2", "", ""]
我知道
x = [3, 4, 1, 2]
[str(i) for i in x]
会产生列表,而无需额外的空字符串。我的问题是,是否有一种简单的方法可以使Python继续前进,并为理解中的每个输入项创建3个输出项。如果没有,我当然可以写一个循环...
更改列表长度我想要做这样的事情:修真
Input: [3, 4, 1, 2]
Output: ["3", "", "", "4", "", "", "1", "", "", "2", "", ""]
我知道
x = [3, 4, 1, 2]
[str(i) for i in x]
会产生列表,而无需额外的空字符串。我的问题是,是否有一种简单的方法可以使Python继续前进,并为理解中的每个输入项创建3个输出项。如果没有,我当然可以写一个循环...
双人间在列表理解行为环路像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', '', '']
,您仍然可以使用列表解析,但产生三个串块,后来将它们连接起来:
sum([[str(i), "", ""] for i in x], [])
# ['3', '', '', '4', '', '', '1', '', '', '2', '', '']
您也可以做到这一点使用zip
与列表理解为:
>>> 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, '', '']
哪里是'1'你的样品中输出? –
你确定列表是你想要的吗?如果你想把一些字符串与每个数字联系起来,你最好使用类似于字典的东西。 – danielunderwood
数字列表是我真正需要的东西的抽象;我的问题实际上是关于如何制作这样的清单。 – John