Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列出不遵守if语句的理解_Python - Fatal编程技术网

Python 列出不遵守if语句的理解

Python 列出不遵守if语句的理解,python,Python,这是我程序的存根 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

这是我程序的存根

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”结尾的行的列表。

如果您的文件中有一行在第一列之外的某处有一个感叹号,您可能会看到类似的内容。e、 g:

line = " !                    "

如果您的文件中有一行在第一列以外的其他地方有一个感叹号,您可能会看到类似的情况。e、 g:

line = " !                    "
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('!'))
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('!'))

第一个
not line.startswith(“!”)和line.strip()
在与第二个
line
值不同的一组
值上运行。列表理解会将
替换为第一个
的列表
-在
的原始值中每个字符串的分隔字段,然后代码将打印出这个新的
。例如,如果
最初包含字符串
“!foo”
,则此字符串将在理解中传递条件,但仅传递
前面的部分
-单个空格-将保存到新的
列表中,单个空格不会导致
line.strip()
返回true。

第一个
非line.startswith(“!”)和line.strip()
在与第二个
值不同的一组上运行。列表理解会将
替换为第一个
的列表
-在
的原始值中每个字符串的分隔字段,然后代码将打印出这个新的
。例如,如果
最初包含字符串
“!foo”
,则此字符串将在理解中传递条件,但仅传递
前面的部分
-单个空格-将保存到新的
列表中,单个空格不会导致
行.strip()
返回true。

如果返回空字符串会怎么样?如果
是空字符串或空白,则是
行.strip()
将被视为
。实际上,在读取文件时,除了最后一行之外,所有行都有换行符。当
not line
为true时,表示您已到达文件的结尾。如果返回空字符串会怎么样?如果
line
是空字符串或空白,则yes
line.strip()
将被视为
False
。实际上,在读取文件时,除了最后一行之外,所有行都有换行符。当
not line
为真时,意味着您已到达文件的末尾。事实上,这就是发生的情况,但这就是我逃避的原因。哦,我明白了。理解是把上面的一行变成纯空白,然后被打印的声明解释为错误,但是已经太晚了,列表已经列出来了。事实上这就是正在发生的事情,但我没有找到原因。哦,我明白了。理解是把上面的一行变成纯粹的空白,然后打印声明会将其解释为错误,但是已经太晚了,列表已经列出来了。