在 Python 列表中搜索子字符串时出现 NameError
NameError when searching for substring in Python list
我有一个列表:
mylist = ['item 101', 'element 202', 'string 303', 'member 404']
我想识别与'item'关联的三个数字,但是'item'并不总是在同一个位置,所以我不能使用mylist[0]
。
我查看了 this Whosebug post 中已接受的答案,并尝试了以下操作:
if any('item' in s for s in mylist):
print(s)
我收到以下错误:
NameError: name 's' is not defined
我研究了那个错误,但我没能找到适合这个特定情况的 examples/solutions。
解决问题的更简单方法是使用列表理解
>>> 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'
或者更好的方法是使用 next
和 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]
我也尝试了您链接 post 中的答案,并且 运行 遇到了同样的问题。但是,如果您使用适当的理解来创建布尔值列表,它应该可以工作:
>>> mylist = ['item 101', 'element 202', 'string 303', 'member 404']
>>> if any(['item' in s for s in mylist]):
... print 'Found item'
打印出预期的内容。
发生该错误是因为您试图在 for 循环中定义 s 之前查看 s。一个简单的解决方法是将语句分成:
for s in mylist:
if 'item' in s:
print(s)
我有一个列表:
mylist = ['item 101', 'element 202', 'string 303', 'member 404']
我想识别与'item'关联的三个数字,但是'item'并不总是在同一个位置,所以我不能使用mylist[0]
。
我查看了 this Whosebug post 中已接受的答案,并尝试了以下操作:
if any('item' in s for s in mylist):
print(s)
我收到以下错误:
NameError: name 's' is not defined
我研究了那个错误,但我没能找到适合这个特定情况的 examples/solutions。
解决问题的更简单方法是使用列表理解
>>> 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'
或者更好的方法是使用 next
和 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]
我也尝试了您链接 post 中的答案,并且 运行 遇到了同样的问题。但是,如果您使用适当的理解来创建布尔值列表,它应该可以工作:
>>> mylist = ['item 101', 'element 202', 'string 303', 'member 404']
>>> if any(['item' in s for s in mylist]):
... print 'Found item'
打印出预期的内容。
发生该错误是因为您试图在 for 循环中定义 s 之前查看 s。一个简单的解决方法是将语句分成:
for s in mylist:
if 'item' in s:
print(s)