更改列表長度我想要做這樣的事情:修真
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