假設我正在遍歷一個串列。我想檢查串列的鄰居(i-1 和 i 1)是否包含某個元素。如何在不遇到“串列索引超出范圍”問題的情況下執行此操作?例子:
list = [1, 0, 1, 0, 1, 0]
for i, j in enumerate(list):
elements = 0
for m in range(i-1,i 2):
if list[m] == 1:
elements = 1
print(list[i], elements)
如何為 range 函式設定邊界,使其不會低于 0 和高于 len(list)?
uj5u.com熱心網友回復:
如果要迭代目標串列中的所有元素,一種解決方案是檢查第二個 for 回圈的值:
_list = [1, 0, 1, 0, 1, 0]
elements = 0
for i, j in enumerate(_list):
for m in range(max(i-1, 0), min(i 2, len(_list))):
if _list[m] == 1:
elements = 1
uj5u.com熱心網友回復:
嘗試從頂部和底部切片串列
list = [1, 0, 1, 0, 1, 0]
elements = 0
# slice list and start from second element and finish at the penultimate element
for i, j in enumerate(list[1:-1], 1):
for m in range(i-1,i 2):
if list[m] == 1:
elements = 1
或者由于您不在外部回圈中使用串列項,因此回圈范圍
elements = 0
# start from the second index and finish at the penultimate index
for i in range(1, len(list)-1):
for m in range(i-1,i 2):
if list[m] == 1:
elements = 1
uj5u.com熱心網友回復:
聽起來您想使用視窗功能。我在這里的某個地方得到了這個,并且多年來一直在使用它:
from typing import Generator
from itertools import islice
def window(seq, n: int = 2) -> Generator:
"""
Returns a sliding window (of width n) over data from the iterable
"""
it = iter(seq)
result = tuple(islice(it, n))
if len(result) == n:
yield result
for elem in it:
result = result[1:] (elem,)
yield result
mylist = [1, 0, 1, 0, 1, 0, 5]
for chunk in window(mylist, n=3):
print(chunk)
這會給你:
(1, 0, 1) (0, 1, 0) (1, 0, 1) (0, 1, 0) (1, 0, 5)
您可以隨意比較生成的“視窗”的內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/481516.html
