使用列表理解技术在python中获取唯一值

使用列表理解技术在python中获取唯一值,python,python-3.x,list,Python,Python 3.x,List,我想获得其中一个列表中出现的值,但其他列表中没有。我甚至试过使用“”,它说语法无效。我正在尝试使用列表理解 com_list = [] a1 = [1,2,3,4,5] b1 = [6,4,2,1] come_list = [a for a in a1 for b in b1 if a != b ] 输出: [1,1,1,2,2,3,3,3,3,4,4,5,5,5,5] 我的预期输出将是`[3,5,6]您可以这样做 come_list =[i for i in list((set(a1) -

我想获得其中一个列表中出现的值,但其他列表中没有。我甚至试过使用“”,它说语法无效。我正在尝试使用列表理解

com_list = []
a1 = [1,2,3,4,5]
b1 = [6,4,2,1]
come_list = [a for a in a1 for b in b1 if a != b ]
输出: [1,1,1,2,2,3,3,3,3,4,4,5,5,5,5]

我的预期输出将是`[3,5,6]

您可以这样做

come_list =[i for i in list((set(a1) - set(b1))) + list((set(b1) - set(a1)))]
print(come_list)
输出

[3, 5, 6]
此新列表同时包含两个列表的所有唯一编号。
这一行的问题是,项目在第一个列表中的每个项目上迭代第二个列表中的所有项目,以检查它是否已初始化,但它没有给出两个项目之间的唯一数字。

您想要的是什么,您可以执行以下操作:

a1 = [1,2,3,4,5]
b1 = [6,4,2,1]

set(a1).symmetric_difference(b1)
# {3, 5, 6}
您也可以这样写:

set(a1) ^ set(b1)
如果您真的希望最后有一个列表,只需将其转换为:

list(set(a1) ^ set(b1))
# [3, 5, 6]
a1=[1,2,3,4,5] b1=[6,4,2,1]


如果你真的想用列表理解来做这件事,好吧,就在这里,但这并不是正确的做法

完全低效的版本:

# Don't do that !

sym_diff = [x for x in a1+b1 if x in a1 and x not in b1 or x in b1 and x not in a1]
print(sym_diff)

# [3, 5, 6]
使用集合来有效地测试成员资格会更好一些:

# Don't do that either

a1 = set([1,2,3,4,5])
b1 = set([6,4,2,1])

sym_diff = [x for x in a1|b1 if x in a1 and x not in b1 or x in b1 and x not in a1]
print(sym_diff)

# [3, 5, 6]

但是如果你开始使用集合,这在这里是正确的,正确地使用它们,并使用对称的差别。

come\u list=a1+[x代表b1中的x,如果x不在a1中]
我猜这是为了学习,因为集合可以很容易地处理这个“两个列表之间的值”是不清楚的。是否希望值只出现在一个列表中,即所有值的集合中。。。请澄清并添加您的预期输出。我可以使用此com_列表轻松获得唯一值=[]a1=[1,2,3,4,5]b1=[6,4,2,1]come_列表=[a代表a1中的a代表b1中的b,如果a==b]我希望获得这两个列表之间的不匹配值。例:3,5,6是这两个列表之间不匹配的值。即使是简单的
list(set(a1+b1))
你是对的。它要求使用列表理解技术这很有帮助,如果我想从两个列表中获取不匹配的值怎么办?…您正在执行[I for I in set(a1)-set(b1)]您的代码不会输出您所说的内容,而是
[3,5]
。测试总是更好的!;)是的,我甚至尝试过并得到了答案,但我的观点是我想使用列表理解技术获得相同的输出。