在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
将不再可用。