1
假設我有如下所示的列表。你怎麼能遍歷列表並替換零之間的零長度可以改變的零之間的界限?將列表中的列表替換爲列表中的列表
輸入:
mylist = [0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0]
輸出:
mylist = [0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0]
假設我有如下所示的列表。你怎麼能遍歷列表並替換零之間的零長度可以改變的零之間的界限?將列表中的列表替換爲列表中的列表
輸入:
mylist = [0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0]
輸出:
mylist = [0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0]
我認爲你可以分兩個階段執行此操作:
像:
# obtain an iterable of the indices of the ones
ones = iter([i for i,x in enumerate(mylist) if x == 1])
# for every pair of indices
for i0,i1 in zip(ones,ones):
# iterate over the range
for j in range(i0+1,i1):
# and assign 1 to these indices
mylist[j] = 1
這產生:
>>> mylist
[0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0]
守旗,無論你是 「內部」 1-1塊(和u需要更新0到1)或不。
這是假設,即單(「最後」)1將產生那些直到列表的末尾:
inside = False
for x in range(len(data)):
if data[x]:
inside = not inside
elif inside:
data[x] = 1
[ 0, 1, 0, 1, 0 ] -> [ 0, 1, 1, 1, 0 ]
[ 0, 1, 0, 0, 0 ] -> [ 0, 1, 1, 1, 1 ]
如果不是你想要的,最後1應該被忽略:
start_block = None
for x in range(len(data)):
if data[x]:
if start_block is not None:
for y in range(start_block + 1, x):
data[y] = 1
start_block
else:
start_block = x
[ 0, 1, 0, 1, 0 ] -> [ 0, 1, 1, 1, 0 ]
[ 0, 1, 0, 0, 0 ] -> [ 0, 1, 0, 0, 0 ]
爲什麼中間還有零點? –
@WillemVanOnsem您似乎已經回答了您自己的問題。介意解釋一下,因爲我仍然不完全明白? –
@ChristianDean:它就像圖形中的*偶奇*規則:有一個「突發」的,一連串的「零」等等。所以我們填入前兩個,第三個和第四個1,等等。 –