在Python列表中搜索子字符串时发生NameError

在Python列表中搜索子字符串时发生NameError,python,list,python-3.x,list-comprehension,Python,List,Python 3.x,List Comprehension,我有一份清单: mylist = ['item 101', 'element 202', 'string 303', 'member 404'] 我想识别与“item”关联的三位数字,但“item”并不总是在同一位置,因此我无法使用mylist[0] 我在中查看了已接受的答案,并尝试了以下方法: if any('item' in s for s in mylist): print(s) 我得到以下错误: NameError: name 's' is not defined 我曾研究

我有一份清单:

mylist = ['item 101', 'element 202', 'string 303', 'member 404']
我想识别与“item”关联的三位数字,但“item”并不总是在同一位置,因此我无法使用
mylist[0]

我在中查看了已接受的答案,并尝试了以下方法:

if any('item' in s for s in mylist):
    print(s)
我得到以下错误:

NameError: name 's' is not defined

我曾研究过这个错误,但我还没有找到任何适合这种特殊情况的例子/解决方案。

解决问题的简单方法是使用列表理解

>>> mylist = ['item 101', 'element 202', 'string 303', 'member 404']
>>> [s for s in mylist if 'item' in s]
['item 101']
如果您确信列表中只有一个这样的元素,那么您也可以使用列表索引

>>> [s for s in mylist if 'item' in s][0]
'item 101'
或者更好的方法是使用和gen-exp

>>> next(s for s in mylist if 'item' in s)
'item 101'

要从字符串
'item 101'
中获取3位数字,您可以执行
mystr[5:9]
,其中
mystr
具有值
'item 101'
,解决问题的更简单方法是使用列表理解

>>> mylist = ['item 101', 'element 202', 'string 303', 'member 404']
>>> [s for s in mylist if 'item' in s]
['item 101']
如果您确信列表中只有一个这样的元素,那么您也可以使用列表索引

>>> [s for s in mylist if 'item' in s][0]
'item 101'
或者更好的方法是使用和gen-exp

>>> next(s for s in mylist if 'item' in s)
'item 101'

要从字符串
'item 101'
中获取3位数字,您可以执行
mystr[5:9]
,其中
mystr
的值
'item 101'
s仅存在于单个语句的范围内:

'item' in s for s in mylist
如果要查找所有项目,必须先将它们保存到列表中。我不确定您是否需要每个项目的索引或每个项目的文本,或者您可以做什么:

mylist = ['item 101', 'element 202', 'string 303', 'member 404']
items = [s for s in mylist if 'item' in s]
if any(items):
    print items[0]

s仅存在于单个语句的范围内:

'item' in s for s in mylist
如果要查找所有项目,必须先将它们保存到列表中。我不确定您是否需要每个项目的索引或每个项目的文本,或者您可以做什么:

mylist = ['item 101', 'element 202', 'string 303', 'member 404']
items = [s for s in mylist if 'item' in s]
if any(items):
    print items[0]

我也在你的链接帖子中尝试过这个答案,也遇到了同样的问题。但是,如果您使用适当的理解来创建布尔值列表,则应该可以:

>>> mylist = ['item 101', 'element 202', 'string 303', 'member 404']
>>> if any(['item' in s for s in mylist]):
...     print 'Found item'

打印出预期结果。

我也在你的链接帖子中尝试了答案,但遇到了同样的问题。但是,如果您使用适当的理解来创建布尔值列表,则应该可以:

>>> mylist = ['item 101', 'element 202', 'string 303', 'member 404']
>>> if any(['item' in s for s in mylist]):
...     print 'Found item'

打印出预期结果。

发生此错误是因为您试图在for循环中定义s之前查看s。一个简单的解决方法是将语句分解为:

mylist中的s的
:
如果s中有“项”:
印刷品

发生此错误是因为您试图在for循环中定义s之前查看s。一个简单的解决方法是将语句分解为:

mylist中的s的
:
如果s中有“项”:
印刷品

如果您确信只有一个,最好使用
下一个(如果s中的'item'在我的列表中为s)
。啊哈@奥尔普:是的。谢谢你,如果你确信只有一个,我会把它添加到帖子中。下一个最好使用
next(如果s中的'item'在我的列表中为s)
。啊哈@奥尔普:是的。谢谢,我将把它添加到帖子中。之所以出现此错误,是因为
s
仅在生成器表达式的生命周期内。一旦它被耗尽并且
any()
返回它的值
s
将不再可用。出现此错误的原因是
s
仅在该生成器表达式的有效期内。一旦它耗尽并且
any()
返回它的值
s
将不再可用。