不使用迭代列出元素

-7 投票
3 回答
2067 浏览
提问于 2025-04-15 11:33

我想知道怎么在列表中找到一个元素,而不需要一个一个地去查找。

3 个回答

4

你也可以使用 in 这种写法:

>>> l = [1,2,3]
>>> 1 in l
True
5

这个问题有点奇怪。你是想要和某个神灵有个热线联系,还是想要另一个函数来帮你做循环,或者你想要一种更高效的方法来检查某个元素是否在里面?

如果是第一种情况,我帮不了你。如果是第二种情况,可以看看关于列表的文档,特别是里面的index方法。如果是第三种情况,可以创建一个set,然后使用in这个关键字。注意,只有当你打算多次在列表中查找时,创建集合才会有意义。

>>> l = [1, 2, 3]
>>> l.index(2)
1
>>> 3 in l
True
>>> ls = set(l)
>>> 3 in ls
True
9

列表的 mylist.index("blah") 方法 会返回 "blah" 这个项第一次出现的位置(索引)。

>>> ["item 1", "blah", "item 3"].index("blah")
1
>>> ["item 1", "item 2", "blah"].index("blah")
2

如果找不到这个项,它会抛出一个错误,叫做 ValueError:

>>> ["item 1", "item 2", "item 3"].index("not found")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.index(x): x not in list

你也可以用 in 这个关键词来检查某个项是否在列表里(但不会告诉你它的位置):

>>> "not found" in ["item 1", "blah", "item 3"]
False
>>> "item 3" in ["item 1", "blah", "item 3"]
True

正如 Harper Shelby 评论的那样,Python 在内部还是需要遍历列表来找到这些项,不过用索引或 in 方法可能会比用 Python 自己的方式稍微快一点,因为这些数据结构是用 C 语言实现的。但更重要的是,

"x" in mylist

..这样做会显得 整洁得多 ..

found = False
for cur in mylist:
    if cur == "x":
        found = True

撰写回答