从两个列表python中只获取唯一元素

use*_*587 5 python list unique

如果我有两个列表(可能有不同的len):

x = [1,2,3,4]
f = [1,11,22,33,44,3,4]

result = [11,22,33,44]
Run Code Online (Sandbox Code Playgroud)

我正在做:

for element in f:
    if element in x:
        f.remove(element)
Run Code Online (Sandbox Code Playgroud)

我越来越

result = [11,22,33,44,4]
Run Code Online (Sandbox Code Playgroud)

小智 20

如果你想要两个列表中的唯一元素,这应该有效:

x = [1,2,3,4]
f = [1,11,22,33,44,3,4]

res = list(set(x+f))
print(res)
# res = [1, 2, 3, 4, 33, 11, 44, 22]
Run Code Online (Sandbox Code Playgroud)

  • 但这根本无法回答OP问题! (4认同)
  • @JeruLuke,因为问题指定他们需要这个答案“[11,22,33,44,4]”,而不是“[1,2,3,4,33,11,44,22]” (3认同)

Mik*_*tty 13

基于在一个新的(封闭的)问题中澄清这个问题:

如果您希望第二个列表中的所有项目都没有出现在第一个列表中,您可以编写:

x = [1,2,3,4]
f = [1,11,22,33,44,3,4]

result = set(f) - set(x) # correct elements, but not yet in sorted order
print(sorted(result)) # sort and print

# Output: [11, 22, 33, 44]
Run Code Online (Sandbox Code Playgroud)


Iop*_*eam 13

在集合上使用此Python文档

>>> # Demonstrate set operations on unique letters from two words
...
>>> a = set('abracadabra')
>>> 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'}
Run Code Online (Sandbox Code Playgroud)

我想出了这段代码来从两个列表中获取唯一元素:

(set(x) | set(f)) - (set(x) & set(f))
Run Code Online (Sandbox Code Playgroud)

或稍作修改即可返回list

list((set(x) | set(f)) - (set(x) & set(f))) #if you need a list
Run Code Online (Sandbox Code Playgroud)

这里:

  1. |在操作者返回元件xf两者
  2. &运算符在和中 返回元素xf
  3. -运算符&从中减去结果|并为我们提供仅在列表之一中唯一显示的元素

  • 这段代码通过了严格的压力测试。应该是gtg (2认同)

Ahi*_*ito 6

输入 :

x = [1,2,3,4]

f = [1,11,22,33,44,3,4]
Run Code Online (Sandbox Code Playgroud)

代码:

l = list(set(x).symmetric_difference(set(f)))
print(l)
Run Code Online (Sandbox Code Playgroud)

输出 :

[2, 22, 33, 11, 44]
Run Code Online (Sandbox Code Playgroud)


小智 6

x = [1, 2, 3, 4]

f = [1, 11, 22, 33, 44, 3, 4]

list(set(x) ^ set(f))

[33, 2, 22, 11, 44]
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码片段可以解决问题,但[包括解释](//meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而那些人可能不知道您建议代码的原因。还请尽量不要在代码中添加解释性注释,这会降低代码和解释的可读性! (6认同)

Jav*_*ved 5

如果您只想从两个列表中获取唯一元素,则可以通过获取。

a=[1,2,3,4,5]
b= [2,4,1]
list(set(a) - set(b))
OP:- [3, 5]
Run Code Online (Sandbox Code Playgroud)


Lee*_*ker 3

您的方法不会获得唯一元素“2”。关于什么:

list(set(x).intersection(f))
Run Code Online (Sandbox Code Playgroud)

  • 几乎是对的,但你搞反了。请尝试 symmetry_difference() 代替。 (3认同)
  • “两个列表中的独特元素”对我来说听起来像是交集。提问者应该澄清。 (2认同)