簡體   English   中英

Python,從列表中刪除元素

[英]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之間差異的更多信息,請點擊此處

這意味着,由於您要在循環中修改ab ,因此就意味着要遍歷更改列表(由於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM