在python

时间:2018-01-13 17:30:19

标签: python python-3.x list duplicates elements

您好我想知道如何在python中按重复元素而不是按值减去2个列表。

ListA = [G, A, H, I, J, B]

ListB = [A, B, C]

ListC = [G, H, I, J] 

所以我们减去ListB值,如果它们在ListA中找到重复项,ListC将在ListA中返回非重复值。

  • 数学上写的是:

    ListC = ListA - (ListA∩ListB)

(我不想删除ListA中的重复项,只删除ListA和ListB之间的交集,如上面的公式所述,所以这个问题不是questions/48242432的重复

5 个答案:

答案 0 :(得分:3)

你可以做一个列表理解..

  <video src="<?php echo $variabile_get; ?>" type='video/x-matroska; codecs="theora, vorbis"' autoplay controls onerror="failed(event)" > </video>

答案 1 :(得分:1)

试试这个

>>> def li(li1,li2):
    li3=li1
    for i in li2:
        if i in li1:
            li3.remove(i)
    return(li3)

>>> li(["G","A","H","I","J","B"],["A","B","C"])
['G', 'H', 'I', 'J']

答案 2 :(得分:1)

在Python中使用集合库。

from sets import Set

setA = Set(['G', 'A', 'H', 'I', 'J', 'B'])
setB = Set(['A', 'B', 'C'])

# get difference between setA and intersection of setA and setB
setC = setA - (setA & setB)

关于集合的一个很酷的事情是它们比列表理解更容易操作。例如,此操作倾向于在O(len(setA)) + O(min(len(setA), len(setB))) = O(len(setA))运行,而列表理解将在O(len(setA) * len(setB))运行以实现相同的结果。当然,这些是平均情况,而不是最坏的情况。最坏的情况是,它们是相同的。不管怎样,你应该使用最适合你操作的对象,对吗?

有关详情,请参阅the Python documentation

答案 3 :(得分:0)

这是你想要的吗?

L1 = ['A', 'G', 'H', 'I', 'J', 'B']
L2 = ['A', 'B', 'C']

for i in L1:
    if i not in L2:
        print(i)

答案 4 :(得分:0)

在使用数学集符号的基础上,为什么不使用集?

ListA = [G,A,H,I,J,B]

ListB = [A,B,C]

SetC = set(ListA) - set(ListB)

但是你得到了一些东西并且必须回到列表......而且订单可能会改变,并且列表中两次的任何字符只有一次在其中

https://docs.python.org/3/tutorial/datastructures.html#sets

>>> a = set('abracadabra') # sets have only unique elements and are unordered
>>> b = set('alacazam')

>>> a                                  # unique letters in a
{'a', 'r', 'b', 'c', 'd'}

>>> a - b                              # letters in a but not in b
{'r', 'd', 'b'}

>>> a | b                              # letters in a or b or both
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}

>>> a & b                              # letters in both a and b
{'a', 'c'}

>>> a ^ b                              # letters in a or b but not both
{'r', 'd', 'b', 'm', 'z', 'l'}