假設我有 [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
搭配,可以處理找不到值的情況
留言板
歡迎留下建議與分享!希望一起交流!感恩!