假設我有 [0,100,200,400] 這list 可以用一行 找出一個數字是在這list 中的哪一個區間嗎?

 

 


可以使用一行程式碼來找出數字在 list 中的哪一個區間,例如要找出數字 150[0, 100, 200, 400] 中的區間,可以這樣做:

lst = [0, 100, 200, 400]
num = 150
index = next(i for i in range(len(lst) - 1) if lst[i] <= num < lst[i+1])
print(index)  # 輸出 1,表示在區間 [100, 200) 中
這行程式碼會找出 num 落在哪個區間 [lst[i], lst[i+1]) 中,並回傳區間的起始索引。

 


 

next 的用法?

 


在 Python 中,next() 函數用於從迭代器中取得下一個元素。通常與 iter() 或生成器搭配使用。它的基本語法如下:

next(iterator, default)
  • iterator:要取得下一個元素的迭代器。
  • default(可選):如果迭代結束,則回傳這個預設值,避免拋出 StopIteration 錯誤。
  • 基本範例

    # 建立一個迭代器
    it = iter([10, 20, 30])
    
    print(next(it))  # 輸出: 10
    print(next(it))  # 輸出: 20
    print(next(it))  # 輸出: 30
    # print(next(it))  # 如果再呼叫一次,會拋出 StopIteration 錯誤
    使用 default

    it = iter([1, 2, 3])
    print(next(it, '結束'))  # 輸出: 1
    print(next(it, '結束'))  # 輸出: 2
    print(next(it, '結束'))  # 輸出: 3
    print(next(it, '結束'))  # 輸出: 結束

    與生成式搭配使用

    next() 常與生成式 (generator expression) 搭配,像是篩選列表中的元素。例如之前的範例:

    lst = [0, 100, 200, 400]
    num = 150
    index = next(i for i in range(len(lst) - 1) if lst[i] <= num < lst[i+1])
    print(index)  # 輸出: 1
    • range(len(lst) - 1) 會產生 [0, 1, 2]
    • if lst[i] <= num < lst[i+1] 用來篩選符合條件的 i
    • next() 會取得第一個符合條件的 i,也就是 1

    使用情境

    • 取得生成器中第一個符合條件的值
    • 避免使用 for 迴圈,讓程式碼更簡潔
    • default 搭配,可以處理找不到值的情況