如何在python中消除list2中的值(与另一个list1相同)

时间:2017-12-08 09:37:30

标签: python python-3.x

输入:

list1 = ['name', 'age', 'gender', 'location']
list2 = ['name', 'age']
list3 

输出:

list3 = ['gender', 'location']

如何从列表中减去常用元素?

5 个答案:

答案 0 :(得分:3)

使用list comprehension

In [4]: list3 = [i for i in list1+list2 if i not in list2]

In [5]: list3
Out[5]: ['gender', 'location']

OR

In [23]:  [i for i in list1+list2 if (list1+list2).count(i) == 1]
Out[23]: ['gender', 'location']

答案 1 :(得分:1)

使用套装,

list3 = list(set(list1)^set(list2))

答案 2 :(得分:0)

一种简单的方法可能是迭代2个列表中较大的一个,如果在另一个列表中找不到当前元素,则追加到最终结果。

示例

list1 = ['name', 'age', 'gender', 'location']
list2 = ['name', 'age']
res = []
for l in list1:
    if l not in list2:
        res.append(l)
print res
  

输出 [“性别”,“位置”]

希望这有帮助!

答案 3 :(得分:0)

一个简单的开头方法:

list1 = some_list
list2 = some_other_list
list3 = []
if len(list1) >= len(list2):
    longer_list = list1
    shorter_list = list2
else:
    longer_list = list2
    shorterlist = list1

for element in longer_list:
    if element not in shorter_list:
        list3.append(element)

这样,您可以捕获全部差异。如果外部循环中的列表比内部循环中的列表短,则会遗漏一些元素。

随着您的进步,您将选择其他方法,例如设置差异:list(set(list1) - set(list2)),列表推导:[i for i in list1 if i not in list2],使用lambdas进行过滤等。

从基础开始,了解正在发生的事情,学习花哨的方法

答案 4 :(得分:0)

尝试以下代码。

In [1]: list1 = ['name', 'age', 'gender', 'location']

In [2]: list2 = ['name', 'age']

In [3]: list3 = list(set(list1) - set(list2))

In [4]: list3
Out[4]: ['gender', 'location']

此方法类似于使用sets的@Aidan Dowling答案。我认为这比使用for循环更好。