我程序的这个存根
with open(fi) as f:
lines = f.readlines()
lines = [line.split('!')[0] for line in lines if not line.startswith('!') and line.strip()] # Removing line and inline comments
for line in lines:
print line, len(line), bool(not line.startswith('!') and line.strip())
给我输出
conduction-guess double_array optional 68 True
valence character optional 68 True
valence-guess double_array optional 68 True
68 False
saturated-bond-length-factor double required 68 True
不应该包含bool值为False的行吗?我输了。 我认为它可能是短路的,但翻转表达式也无济于事。
为了澄清,我希望我的列表是以' True'结尾的行的列表。在上面的代码部分。
答案 0 :(得分:3)
第一个not line.startswith('!') and line.strip()
正在运行与{2}值不同的line
值。列表推导会导致lines
替换为原始值!
中每个字符串的第一个lines
分隔字段的列表,而这是新的lines
然后代码打印出来。例如,如果lines
最初包含字符串" !foo"
,则此字符串将在理解中传递条件,但只有!
之前的部分 - 单个空格 - 将保存到新的lines
列表,单个空格不会导致line.strip()
返回true。
答案 1 :(得分:2)
如果你的文件中有一行除了第一列以外的地方有感叹号,你就可以看到类似的东西。 e.g:
line = " ! "
答案 2 :(得分:0)
line.strip()
返回一个新字符串,它不是布尔值。
更新的代码:
with open(fi) as f:
lines = [ line.strip() for line in f ]
# remove exclamation points
lines = [ line.split('!')[0] for line in lines
if not line.startswith('!')
]
# 3rd col will always be True
for line in lines:
print line, len(line), bool(not line.startswith('!'))