使用if和for循环列出理解

时间:2017-07-19 03:15:20

标签: python list-comprehension

我有以下for循环和if条件。我想使用Python的列表理解将其更改为一行代码。但是,我不知道它为什么不起作用,它说' ^'指着if语句。

原:

for i in range(len(lines)):
        if (lines[i].find('('))!=-1:
            lines[i] = lines[i][0:(lines[i].find('(')-1)]

更改为:

lines = [[lines[i][0:(lines[i].find('(')-1)]] for (i in range(len(lines))) if ((lines[i].find('('))!=-1)]

我只是想使用列表理解方法,据说这是python功能之一。希望学到新东西,因为我没有编程经验。谢谢你的帮助,朋友们!

4 个答案:

答案 0 :(得分:1)

如果您放弃range()并使用.split()代替.find(),则可以更短。

lines = [line.split('(')[0] for line in lines]

答案 1 :(得分:0)

你的括号太多了。 尝试这个,看看它是否有效。

lines = [lines[i][0:lines[i].find('(')-1] for i in range(len(lines)) if lines[i].find('(')!=-1]

答案 2 :(得分:0)

您可以尝试以下(看起来更干净):

[lines[i][0:lines[i].index('(')-1] if '(' in lines[i] else lines[i] for i in range(len(lines))]

所以,它说do trimming if ( is in the line else leave as it is for each line

答案 3 :(得分:0)

您更改的代码可以像这样替换

apply = lambda line: line[0:line.index('(') - 1]
lines = [apply(line) for line in lines if '(' in line]

通过单行编写代码可能看起来很酷,但它不可读。

以上代码也可以像这样编写单行

lines = [line[0:line.index('(') - 1] for line in lines if '(' in line]

但是阅读起来比较困难。

您更改的代码与原始代码不完全相同。 原始代码中的行包含不具有'('的字符串,但更改的代码中的行仅包含应用的行。