請幫助我在 Python 3.9 中進行以下查詢。我有以下子串列:
[0, 1]
[1, 3]
[2, 5]
我想制作一個新串列,其中每個子串列重復不同的次數。所需輸出:
[[0,1],[0,1],[0,1],[1,3],[1,3],[2,5],[2,5],[2,5],[2,5]]
我嘗試執行以下操作:
[[[0,1]]*3,[[1,3]]*2,[[2,5]]*4]
但是我得到了這個:
[[[0,1],[0,1],[0,1]],[[1,3],[1,3]],[[2,5],[2,5],[2,5],[2,5]]]
如何獲得我想要的輸出?或者,我如何將其展平一層?謝謝
uj5u.com熱心網友回復:
您可以解壓縮子串列:
[*[[0,1]]*3, *[[1,3]]*2, *[[2,5]]*4]
# [[0, 1], [0, 1], [0, 1], [1, 3], [1, 3], [2, 5], [2, 5], [2, 5], [2, 5]]
但是請注意,生成的子串列不是獨立的,而是對相同串列物件的參考(對一個子串列所做的更改將反映在所有相同的其他子串列中)!更好地使用生成器/理解:
[*([0,1] for _ in range(3)),
*([1,3] for _ in range(2)),
*([2,5] for _ in range(4))]
# [[0, 1], [0, 1], [0, 1], [1, 3], [1, 3], [2, 5], [2, 5], [2, 5], [2, 5]]
1-level flattening 更普遍的問題已經被問過和回答過多次,但主要的選擇是嵌套理解:
[x for sub in lst for x in sub]
或itertools.chain:
[*chain(lst)]
uj5u.com熱心網友回復:
您可以使用串列回圈:
r1 = [0, 1]
r2 = [1, 3]
r3 = [2, 5]
h = [*(r1 for x in range(3)),
*(r2 for x in range(2)),
*(r3 for x in range(4))]
print(h)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314379.html
上一篇:Python-將類屬性分配給變數
