如何找到列表中满足条件的第一个元素?

3
假设我有一个列表,名为 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个回答

7

你可能需要使用itertools.takewhile函数:

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

这将返回[5, 10, 15]


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

else代码块中,只需使用break即可


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

0

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

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

这将返回 [5, 10, 15]


0

你可以使用类似这样的东西

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接