例如,我想創建一個包含 n 0s 和 m 1s 的集合[0, 0, ...0, 1, 1, ..., 1]。有沒有辦法做類似的事情[0 for i in range(n), 1 for j in range(m)]?
uj5u.com熱心網友回復:
您可以分別創建兩個串列,然后像這樣添加它們:
[0 for i in range(n)] [1 for j in range(m)]
或者簡單地使用串列乘法:
[0]*n [1]*m
uj5u.com熱心網友回復:
你可以這樣做:
lst = [0]*n [1]*m
uj5u.com熱心網友回復:
如果您想這樣做而不必將兩個串列添加在一起(例如,如果n和m非常大,并且您希望能夠生成此序列而不將其全部放入串列中),您可以使用 a 遍歷組合范圍有條件的:
>>> n, m = 2, 3
>>> [0 if i < n else 1 for i in range(n m)]
[0, 0, 1, 1, 1]
您還可以使用itertools.chain將兩個生成器“添加”在一起:
>>> from itertools import chain
>>> list(chain((0 for _ in range(n)), (1 for _ in range(m))))
[0, 0, 1, 1, 1]
uj5u.com熱心網友回復:
停止思考在一條線上做事。考慮使用有用的、模塊化的、可擴展的抽象。對于這類事情,itertools提供了很多有用的抽象。
>>> from itertools import repeat, chain
>>> list(chain(repeat(0, 4), repeat(1, 3)))
[0, 0, 0, 0, 1, 1, 1]
通過組合較小的有用抽象開始構建您自己的有用抽象:
>>> from itertools import repeat, chain, starmap
>>> def builder(*pairs, consume=list):
... return consume(chain.from_iterable(starmap(repeat, pairs)))
...
>>> builder((0,3), (1, 4), (2,1), (3, 6))
[0, 0, 0, 1, 1, 1, 1, 2, 3, 3, 3, 3, 3, 3]
盡管有時越簡單越好,并學習利用該語言提供的各種語法糖:
>>> [*repeat(0, 4), *repeat(1, 3), *repeat(2,2)]
[0, 0, 0, 0, 1, 1, 1, 2, 2]
uj5u.com熱心網友回復:
使用串列理解和 2 個 for 回圈來解決您的問題的另一個潛在解決方案
n,m = 3,4
[i for i,n_numbers in enumerate((n,m)) for _ in range(n_numbers) ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/415646.html
標籤:
下一篇:熊貓:如何正確取消df?
