2017-02-28 84 views
0

我想问一下,是否有可能在列表理解的一行中处理多个列表?我正在使用Python 2.7。是否有可能在单个列表理解行中处理两个列表?

下面是代码的样子:

n=[1,2,3,4,5,6,7] 
m=[1,7] 
c=[] 

for x in m: 
    if x in n: 
     c.append(x) 
     n.pop(n.index(x)) 

print n 
print c 

输出是:

[2,3,4,5,6] 
[1,7] 

现在我想知道如果我能转码(第5行至第8行)成单行使用列表理解?

我希望你的建议。让我知道我的问题是否有重复。非常感谢你。

+1

可能不是(因为那个流行音乐),但你到底想要做什么? –

+1

如果你只需要从n中删除存在于m中的项目,那么,没问题 –

+0

哦。我试图(如果可能)让我的代码运行得更快,因为我注意到我的程序在处理大量数据时运行缓慢,我希望做列表理解可以使其运行速度更快? –

回答

1

你可以做到这一点,因为从列表中弹出一个值这种方式返回值

n=[1,2,3,4,5,6,7] 
m=[1,7] 
c=[n.pop(n.index(x)) for x in m if x in n] 
print n 
print c 
+0

非常感谢你abccd。 –

1
n=[1,2,3,4,5,6,7] 
m=[1,7] 
print set(n)-set(m) 
> [2,3,4,5,6] 

分配套自己的变量,如果你需要执行其他操作。转换为一个集合需要一些时间在一个大列表上,但是成员,减法,联合或交集操作应该非常快。

+0

非常感谢。我应该先学习set()。但为什么我只能检查(绿色)一个答案? –