Python列表理解和普通循环之间有什么区别?

时间:2016-05-22 11:18:19

标签: python

下一个循环为count参数返回值for line in textfile.text.splitlines(): count += 1 if 'hostname' in line else 0

1

然而,尝试使用列表推导来做同样的事情会返回count += 1 if ['hostname' in line for line in textfile.text.splitlines()] else 0

-(void)backupDownload{
    _tmpFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"filename"];
    [[self restClient] loadFile:@"/filename" intoPath:_tmpFilePath];

}

我哪里出错了?

3 个答案:

答案 0 :(得分:2)

列表推导是列表创建的捷径。以下是(大致)等价的:

result = []
for item in l:
    if condition(item):
        result.append(item.attribute)

result = [item.attribute for item in l if condition(item)]

所以你的代码

count += 1 if ['hostname' in line for line in textfile.text.splitlines()] else 0

相同
result = []
for line in textfile.text.splitlines():
    result.append('hostname' in line)

count += 1 if result else 0

显然与

不一样
for line in textfile.text.splitlines():
    count += 1 if 'hostname' in line else 0

相反,你可以做像

这样的事情
count += sum([1 for line in textfile.text.splitlines() if 'hostname' in line])

答案 1 :(得分:1)

试试这个 -

count += len([line for line in textfile.text.splitlines() if 'hostname' in line])

答案 2 :(得分:0)

这是因为在第二种情况下,你的if条件只执行一次。

如果listobject为0,则第二个语句转换为count + = 1;

此处列表对象不是None,因此count + = 1执行一次。