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

时间:2021-06-12 16:18:52

标签: python python-3.x list

假设我有一个列表 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

然而,这似乎效率低下。有没有更好的方法来做到这一点?

6 个答案:

答案 0 :(得分:7)

itertools.takewhile 函数看起来像您想要的:

from itertools import takewhile
list(takewhile(lambda x: x % 5 == 0, [5, 10, 15, 16, 20]))

这将返回 [5, 10, 15]

答案 1 :(得分:3)

您的想法实际上是一个有效的答案,因为它避免了处理比需要更多的元素。 @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):

这将使您的代码更具可读性,并且不易出错。

答案 2 :(得分:2)

else 代码块中使用 break 就可以了

答案 3 :(得分:0)

假设你有 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

答案 4 :(得分:0)

这并不是真的低效,但可能更清晰的方法是 -

l = [5, 10, 15, 16, 20]
result = []
for item in l:
    if item % 5 == 0:
        result.append(item)
    else:
        break

这给出了 [5, 10, 15]

答案 5 :(得分:0)

你可以使用这样的东西

mylist = [5, 10, 15, 16, 20]
result = []
for item in mylist:
    if item % 5 != 0:
        break
    result.append(item)
print(result)