簡體   English   中英

如何在 python 中為我的范圍函數設置限制?

[英]How do I set limits for my range function in python?

假設我正在遍歷一個列表。 我想檢查列表的鄰居(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)?

嘗試從頂部和底部切片列表

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

如果要迭代目標列表中的所有元素,一種解決方案是檢查第二個 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

聽起來您想使用窗口功能。 我在這里的某個地方得到了這個,並且多年來一直在使用它:

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)

您可以隨意比較生成的“窗口”的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM