【发布时间】:2018-07-31 15:12:15
【问题描述】:
我在一个列表中有多个列表,并且想要检查多个内容并使用if 条件和True 或False 形成一个新列表。我的代码:
import re
runlist = [['229', '134', '9'], ['229', '137', '5'], ['629', '140', '5'], ['631', '140', '5'], ['632', '140', '5'], ['633', '140', '8'], ['422', '141', '5'], ['628', '141', '9'], ['629', '141', '11']], [['629', '145', '8'], ['630', '145', '8'], ['631', '145', '8'], ['632', '145', '8'], ['632', '146', '5']], ...]
goodrunslist = []
for i in range(len(runlist)):
for k in range (0, len(runlist[i])):
if re.match('[2][0-5][0-9]', runlist[i][k][0]):
ch2 = True
for m in range (0, len(runlist[i])):
if re.match('[6][0-4][0-9]', runlist[i][m][0]):
ch4 = True
if ch2 and ch4:
goodrunslist.append(runlist[i])
但是,在最后的第一个 for 循环下,它给了我一个 NameError ch2 和 ch4 未定义,因此它不能将任何内容附加到新列表中。我该如何解决这个问题?
编辑:我已经通过下面的代码修复了NameError,但现在我的问题是新列表没有返回任何内容(它正在返回[]),即使我可以看到它应该有一些其中的元素。新代码如下。任何修复或建议表示赞赏;谢谢!
import re
runlist = [['229', '134', '9'], ['229', '137', '5'], ['629', '140', '5'], ['631', '140', '5'], ['632', '140', '5'], ['633', '140', '8'], ['422', '141', '5'], ['628', '141', '9'], ['629', '141', '11']], [['629', '145', '8'], ['630', '145', '8'], ['631', '145', '8'], ['632', '145', '8'], ['632', '146', '5']], ...]
goodrunslist = []
ch2, ch4 = False, False
for i in range(len(runlist)):
for k in range (0, len(runlist[i])):
if re.match('[2][0-5][0-9]', runlist[i][k][0]):
ch2 = True
else:
ch2 = False
for m in range (0, len(runlist[i])):
if re.match('[6][0-4][0-9]', runlist[i][m][0]):
ch4 = True
else:
ch4 = False
if ch2 and ch4:
goodrunslist.append(runlist[i])
【问题讨论】:
-
您需要将这些变量初始化为内部循环上方的
False,以便无论是否找到任何匹配项,它们都具有定义的值。 -
您应该接受一个解决了您的第一个问题的答案。然后,您针对新错误发布一个新问题。
-
ch2 and ch4永远不会是真的。您的号码不能以 2 和 6 开头 -
这里的括号不匹配,所以这段代码根本不会运行(我只是删除了
,...。但我成功添加了[['629', '245', '8'], ['245', '245', '8']]。
标签: python list boolean append nameerror