[英]Python, removing elements from lists
嗨,我是新手,我对功能有疑问。 我有两个清单:
>>> a = ['a0', 'b1', 'a2', 'b3', 'a4', 'b5']
>>> b = ['b0', 'a1', 'b2', 'a3', 'b4', 'b5']
我想删除相同位置上的相同元素和较大元素; 我的输出应该是:
>>> function(a,b)
>>> a
['a0', 'a2', 'a4']
>>> b
['a1', 'a3']
我尝试了这个:
>>> def function(a,b):
for i1,i2 in zip(a,b):
if i1 == i2:
a.remove(i1)
b.remove(i2)
elif i1 < i2:
b.remove(i2)
else:
a.remove(i1)
但是它返回了我:
>>> function(a,b)
>>> a
['a0', 'b1', 'a2', 'b3', 'a4', 'b5']
>>> b
['a1', 'a3', 'b5']
我怎么了
在python 2中可以工作,但是在python 3中, zip
已成为生成器函数:它按需创建项目(有关各种zip,izip内容以及2和3之间差异的更多信息,请点击此处 )
这意味着,由于您要在循环中修改a
和b
,因此就意味着要遍历更改列表(由于zip
函数的作用,它显得不太明显)。
要解决此问题,请压缩输入列表的副本
def function(a,b):
for i1,i2 in zip(a[:],b[:]):
if i1 == i2:
a.remove(i1)
b.remove(i2)
elif i1 < i2:
b.remove(i2)
else:
a.remove(i1)
我已经在python 2.7中运行了原始代码,它实际上确实输出了您要查找的值。 但是这里有一个更简洁的版本供您考虑,它也可以解决这个问题:
def function(a,b):
for i1, i2 in zip(a,b):
if i1 <= i2:
b.remove(i2)
if i2 <= i1:
a.remove(i1)
a = ['a0', 'b1', 'a2', 'b3', 'a4', 'b5']
b = ['b0', 'a1', 'b2', 'a3', 'b4', 'b5']
function(a, b)
print a
>>>['a0', 'a2', 'a4']
print b
>>>['a1', 'a3']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.