我使用以下内容检查 item
是否在 my_list
中:
if item in my_list:
print("Desired item is in list")
但有时,它找不到该项目。为什么是这样?
“ if item in my_list:
”是在列表中查找项目的最“pythonic”方式吗?
原文由 Stephane Rolland 发布,翻译遵循 CC BY-SA 4.0 许可协议
我使用以下内容检查 item
是否在 my_list
中:
if item in my_list:
print("Desired item is in list")
但有时,它找不到该项目。为什么是这样?
“ if item in my_list:
”是在列表中查找项目的最“pythonic”方式吗?
原文由 Stephane Rolland 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你想找到一个元素或 None
在 next
--- 中使用默认值,它不会引发 StopIteration
如果在列表项中找不到:
first_or_default = next((x for x in lst if ...), None)
原文由 Janusz Skonieczny 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
至于您的第一个问题:“
if item is in my_list:
”非常好,如果item
等于my_list
中的一个元素,则应该可以工作。该项目必须与列表中的项目 完全 匹配。例如,"abc"
和"ABC"
不匹配。特别是浮点值可能会受到不准确的影响。例如,1 - 1/3 != 2/3
。至于你的第二个问题:如果在列表中“找到”东西,实际上有几种可能的方法。
检查里面是否有东西
这是您描述的用例:检查列表中是否包含某些内容。如您所知,您可以使用
in
运算符:筛选集合
即查找序列中满足某个条件的所有元素。您可以为此使用列表理解或生成器表达式:
后者将返回一个 _生成器_,您可以将其想象为一种惰性列表,只有在您遍历它时才会构建它。顺便说一句,第一个完全等同于
在 Python 2 中。在这里您可以看到正在工作的高阶函数。在 Python 3 中,
filter
不返回列表,而是返回类似生成器的对象。寻找第一次出现
如果您只想要与条件匹配的第一件事(但您还不知道它是什么),则可以使用 for 循环(也可能使用
else
子句,这不是真的知名)。你也可以使用如果没有找到,它将返回第一个匹配项或引发
StopIteration
。或者,您可以使用查找物品的位置
对于列表,还有
index
方法,如果您想 知道 某个元素在列表中的位置,有时会很有用:但是,请注意,如果您有重复项,
.index
总是返回最低索引:……如果有重复并且您想要所有索引,那么您可以使用
enumerate()
代替: