2024-04-23 09:26:37 发布
网友
我遇到过:
item = someSortOfSelection() if item in myList: doMySpecialFunction(item)
但有时它并不适用于我的所有项,好像它们在列表中无法识别(当它是一个字符串列表时)。
这是在列表中查找项的最“python”的方式吗:if x in l:?
if x in l:
至于您的第一个问题:如果item等于myList中的一个元素,那么该代码就可以正常工作。也许您试图找到一个字符串,但它与其中一个项不完全匹配,或者您使用的浮点值存在不精确性。
item
myList
至于你的第二个问题:如果在列表中“发现”事物,实际上有几种可能的方法。
这是您描述的用例:检查列表中是否有内容。如您所知,您可以使用in运算符:
in
3 in [1, 2, 3] # => True
也就是说,找到一个序列中满足某个条件的所有元素。您可以使用列表理解或生成器表达式:
matches = [x for x in lst if fulfills_some_condition(x)] matches = (x for x in lst if x > 6)
后者将返回一个生成器,您可以将其想象为一种惰性列表,只有在您遍历它时才会生成它。顺便说一下,第一个完全等同于
matches = filter(fulfills_some_condition, lst)
在Python 2中。在这里你可以看到高阶函数在工作。在Python 3中,filter不返回列表,而是返回一个类似生成器的对象。
filter
如果您只想要与条件匹配的第一件事(但您还不知道它是什么),那么使用for循环就可以了(也可以使用else子句,这并不是很有名)。你也可以使用
else
next(x for x in lst if ...)
如果未找到匹配项,则返回第一个匹配项或引发一个StopIteration。或者,您可以使用
StopIteration
next((x for x in lst if ...), [default value])
对于列表,还有一个index方法,如果您想知道列表中某个元素的位置,它有时会很有用:
index
[1,2,3].index(2) # => 1 [1,2,3].index(4) # => ValueError
但是,请注意,如果有重复项,.index始终返回最低索引:。。。。。。
.index
[1,2,3,2].index(2) # => 1
如果存在重复项,并且需要所有索引,则可以使用enumerate()代替:
enumerate()
[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
如果要查找一个元素或None在next中使用默认值,则如果在列表中找不到该项,则不会引发StopIteration:
None
next
first_or_default = next((x for x in lst if ...), None)
虽然Niklas B.给出的答案相当全面,但当我们想在列表中找到某个项目时,有时获取其索引是很有用的:
next((i for i, x in enumerate(lst) if [condition on x]), [default value])
至于您的第一个问题:如果
item
等于myList
中的一个元素,那么该代码就可以正常工作。也许您试图找到一个字符串,但它与其中一个项不完全匹配,或者您使用的浮点值存在不精确性。至于你的第二个问题:如果在列表中“发现”事物,实际上有几种可能的方法。
检查里面是否有东西
这是您描述的用例:检查列表中是否有内容。如您所知,您可以使用
in
运算符:过滤集合
也就是说,找到一个序列中满足某个条件的所有元素。您可以使用列表理解或生成器表达式:
后者将返回一个生成器,您可以将其想象为一种惰性列表,只有在您遍历它时才会生成它。顺便说一下,第一个完全等同于
在Python 2中。在这里你可以看到高阶函数在工作。在Python 3中,
filter
不返回列表,而是返回一个类似生成器的对象。找到第一个
如果您只想要与条件匹配的第一件事(但您还不知道它是什么),那么使用for循环就可以了(也可以使用
else
子句,这并不是很有名)。你也可以使用如果未找到匹配项,则返回第一个匹配项或引发一个
StopIteration
。或者,您可以使用查找项目的位置
对于列表,还有一个
index
方法,如果您想知道列表中某个元素的位置,它有时会很有用:但是,请注意,如果有重复项,
.index
始终返回最低索引:。。。。。。如果存在重复项,并且需要所有索引,则可以使用
enumerate()
代替:如果要查找一个元素或
None
在next
中使用默认值,则如果在列表中找不到该项,则不会引发StopIteration
:虽然Niklas B.给出的答案相当全面,但当我们想在列表中找到某个项目时,有时获取其索引是很有用的:
相关问题 更多 >
编程相关推荐