我有以下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功能之一。希望学到新东西,因为我没有编程经验。谢谢你的帮助,朋友们!
答案 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]
但是阅读起来比较困难。
您更改的代码与原始代码不完全相同。 原始代码中的行包含不具有'('的字符串,但更改的代码中的行仅包含应用的行。