簡體   English   中英

創建包含列表x但不包含列表y中與列表x相同的元素的新列表-python

[英]Create new list containing list x but not elements in list y that are the same as in list x - python

我知道這個問題之前已經討論過,而且我知道這是一個新手和簡單的問題,但是由於某些原因,我無法將其束縛在執行此操作所需的代碼周圍。 這是我需要的一個實際示例:

可以說我有一個tumblr帳戶,我關注了5個人,其中3個人關注了我。

iFollow = [Tom, Richard, Bob, Samantha, Kat]
followsMe = [Samantha, Kat, Bob]

現在,我想取消關注我追隨的人,但是不要跟着我回來。 因此,在此示例中,我想取消關注TomRichard ,因為即使我關注他們,他們也沒有關注我。 我想創建一個列表:

unfollowThese = [Tom, Richard]

我一生無法弄清楚該如何做。 我知道有一個相交,找到了共同的元素,它將輸出“ Bob”,似乎我想要相反,我希望從我要制作的新列表中刪除兩個列表中的共同元素。

IE瀏覽器,我希望將iFollow和FollowMe中常見的元素從unfollowThese中刪除,因為我不想取消關注我的關注者。

謝謝。

ps:如果您能想到一個更好的標題,請進行更改,我想不出什么名字了。

最簡單的方法是使用設置差異

unfollowThese = set(iFollow).difference(followsMe)

如果followsMe很大,這也應該比列表理解要快-這是線性的平均時間復雜度, followsMe的長度為O(n),而不是兩個長度都是線性的,所以O(n * k)。

為了完整起見,請注意,您也可以使用一個set來加快“訂單事項”版本的線稿時間:

followsMeSet = set(followsMe)
unfollowThese = [person for person in iFollow if person not in followsMeSet]

set成員資格測試是恆定的平均時間。

如果訂單很重要,則使用列表推導:

unfollowThese = [ person for person in iFollow if person not in followsMe ]

如果項目順序無關緊要,則使用sets

import sets
s1 = sets.Set(iFollow)
unfollowThese = s1.difference(followsMe)
iFollow = ['Tom', 'Richard', 'Bob', 'Samantha', 'Kat']
followsMe = ['Samantha', 'Kat', 'Bob']


unfollowThese = [name for name in iFollow if name not in followsMe]

# returns: ['Tom', 'Richard']

你可以這樣做

unfollowThese = [x for x in iFollow if x not in followsMe]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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