[英]How to find first elements in list that match a condition?
假設我有一個列表l
,其中包含[5, 10, 15, 16, 20]
。 我想獲得所有可以被5
整除的第一個元素(所以前三個元素),而不是最后一個20
。 我該怎么做呢? 我已經搞定了:
done = False
i = 0
while not done and i < len(l):
if l[i] % 5 == 0:
answer.append(source[i])
else:
done = True
i += 1
但是,這似乎效率低下。 有沒有更好的方法來做到這一點?
itertools.takewhile
function 似乎是您想要的:
from itertools import takewhile
list(takewhile(lambda x: x % 5 == 0, [5, 10, 15, 16, 20]))
這將返回[5, 10, 15]
。
您的想法實際上是一個有效的答案,因為它避免了處理比需要更多的元素。 @SamEstep 的答案應該是公認的答案,因為它完全按照預期使用itertools
,但無論如何,您的代碼的正確設置如下:
l = [5, 10, 15, 16, 20]
result = []
for elem in l:
if elem % 5 == 0:
result.append(elem)
else:
break
# [5, 10, 15]
附帶說明:不鼓勵僅索引列表的while
循環,因為它會使您的意圖不那么明確,並且會使您的代碼更容易出現錯誤,因為您必須自己處理索引。 編寫它的更好方法是編寫:
for i in range(len(l)):
它為您提供列表中每個元素的索引。 但是,如果您要做的只是索引列表,那么您可以遍歷列表中的每個項目,這增加了可讀性(這就是我在上面所做的):
for elem in l:
如果您需要索引和元素,請使用enumerate
:
for idx, elem in enumerate(l):
這將使您的代碼更具可讀性,並且不易出錯。
在else
代碼塊中使用break
就可以了
假設您有 myList,並且您想在其中找到可以除以 n 的項目:
myList = [1,2,10,12,5,20]
ansList = []
ansCount = 0
for i in myList:
if i % n == 0:
# condition is true, do whaterver you want with "i"; here I added it to a new list(ansList)
ansList.append(i)
ansCount += 1
# you can also break the loop as your wish
if ansCount > 2:
break
這並不是真的低效,但可能更清晰的方法是 -
l = [5, 10, 15, 16, 20]
result = []
for item in l:
if item % 5 == 0:
result.append(item)
else:
break
這給出了 [5, 10, 15]
你可以使用這樣的東西
mylist = [5, 10, 15, 16, 20]
result = []
for item in mylist:
if item % 5 != 0:
break
result.append(item)
print(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.