[英]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.