簡體   English   中英

如何在列表中找到匹配條件的第一個元素?

[英]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.

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