Python 使用if和for循环列出理解

Python 使用if和for循环列出理解,python,list-comprehension,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
循环和
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的一个特性。希望学习一些新的东西,因为我没有编程经验。谢谢你的帮助,朋友们

括号太多了。 试试这个,看看是否有效

lines = [lines[i][0:lines[i].find('(')-1] for i in range(len(lines)) if lines[i].find('(')!=-1]
您可以尝试以下操作(看起来有点干净):


因此,它说,
do trimming if(在行中),否则保留每行的原样

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

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]
用单行写代码看起来很酷,但不可读

上面的代码也可以这样写一行

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]
但是它更难阅读

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

如果您删除
范围()
,并使用
.split()
而不是
.find()
,则可以缩短行数


括号太多,其中一些语法位置不正确。请删除所有括号,函数调用中的括号除外。对于初学者,您可以尝试删除
(i在范围(len(行))中)周围的括号
…但是,从根本上说,您可能希望为此使用一个普通循环,这样您就可以保留对
行[i]的引用。查找(“(”)
,而不是反复计算,这是非常低效的。列出理解,但如果它们使您的代码无法阅读(您正在快速接近),请不要使用它们或者它们迫使您效率低下(在本例中就是这样)嗨,我曾尝试删除for循环和if循环周围的paraenthese,结果是弹出没有属性“find”的“list”对象,指向if循环,您可以尝试:
[lines[i][0:[lines[i]。find(“(”)-1)]if(lines[i]。find(“(”)!=-1 else行[i]表示范围内的i(len(行))]