我有一個帶有字符的串列,像這樣:
s = ['Y'/span>, 'U'/span>, 'U'/span>, 'N'/span>, 'U', 'U', 'N', 'N', 'N']
以及下面的陣列:
t = [2, 4, 3]
我想根據陣列來劃分串列,這樣每個子集st[i]都有len(t[i])。這個例子的結果應該是:
st = [['Y'/span>, 'U'/span>], ['U'/span>, 'N'/span>, 'U', 'U'], ['N', 'N', 'N']]。
如果陣列t是:
t = [5, 2, 2]
那么結果應該是:
st = [['Y'/span>, 'U'/span>, 'U'/span>, 'N'/span>。'U'], ['U', 'N'], ['N', 'N'] ]
條目是s和t。我正在嘗試插入兩個回圈,一個用于串列s,另一個用于陣列t,但它沒有作業。我怎樣才能實作這一點呢?
uj5u.com熱心網友回復:
你可以從s創建一個迭代器,并使用itertools.islice根據t中的大小來切分這個迭代器:
from itertools import islice
i = iter(s)
[list(islice(i, l)) for l in t] 。
這就回傳:
[['Y'/span>, 'U'/span>], ['U'/span>, 'N'/span>, 'U', 'U'], ['N', 'N', 'N']]。
uj5u.com熱心網友回復:
對于[2, 4, 3]的輸入,起始索引將是:
- 0
- 0 2 = 2
- 0 2 4 = 6
你可以使用itertools.accumulate()來收集起始指數。
一旦知道了起始索引,我們只需要通過zip()與每個起始索引要分組的專案數配對,這已經是串列[2, 4, 3]的內容。因此:
- 開始0:計數2
- 開始 2 : 計數 4
- 開始6:計數3
或者正如@don'ttalkjustcode在評論中提到的,我們也可以跟蹤累計的停止指數:
- 開始(2-2=0):停止2
- 開始 (6 - 4 = 2) : 停止 6
- 開始 (9 - 3 = 6) : 停止 9
from itertools import accumulate
s = ['Y'/span>, 'U'/span>, 'U'/span>, 'N'/span>, 'U', 'U', 'N', 'N', 'N']
for t in [
[2, 4, 3] 。
[5, 2, 2] 。
[1, 2, 6] 。
[6, 1, 2] 。
[2, 1, 4, 3] 。
[2, 1, 2, 2, 1, >1] 。
]:
# 選項1:使用開始/計數邏輯。
z = [s[start:start count] for start, count in zip(accumulate([0] t), t)]。
# 選項2:使用停止/計數邏輯(感謝@don'ttalkjustcode指出這一點!)。
# z = [s[stop-count:stop] for stop, count in zip(accumulate(t), t)]
print(z)
輸出
[['Y', 'U'], ['U', 'N', 'U', 'U'], ['N', 'N', 'N']]
[['Y'/span>, 'U'/span>, 'U'/span>, 'N'/span>, 'U'/span>]。['U', 'N'], ['N', 'N']]
[['Y'], ['U', 'U'], ['N', 'U', 'U', 'N', 'N', 'N']]
[['Y', 'U', 'U', 'N', 'U', 'U'], ['N'], ['N', 'N']
[['Y', 'U'], ['U'], ['N', 'U', 'U', 'N'], ['N', 'N']]
[['Y', 'U'], ['U'], ['N', 'U'] 。['U', 'N'], ['N'], ['N']]
uj5u.com熱心網友回復:
你可以通過迭代地從s的副本中分割出大塊的內容來達到你想要的結果:
i = 0
結果 = []
s_copy = s.copy()
while s_copy:
result.append(s_copy[:t[i]] )
s_copy = s_copy[t[i]:] 。
i =1
uj5u.com熱心網友回復:
基本上你可以使用:
s = ['Y'/span>, 'U'/span>, 'U'/span>, 'N'/span>, 'U', 'U', 'N', 'N', 'N']
t = [2, 4, 3]
st = []
偏移 = 0 0for size in t:
st.append(s[offset:size offset])
offset = size
print(st)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324478.html
標籤:
