Python:通过另一个列表的副本删除一个列表的条目

时间:2014-07-03 08:22:20

标签: python python-2.7

我有两个python列表。在第一个列表中,我想删除所有重复项,在第二个列表中,我想删除第一个列表中重复项位置的项目。

例如,从这两个列表中

list_1 = [1,1,2,3]
list_2 = [a,b,c,d]

我想生成这两个:

result_1 = [1,2,3]
result_2 = [a,c,d]

我不在乎,是result_2=[a,c,d]还是result_2=[b,c,d]

当然我可以想办法用简单的for循环解决这个问题,但我想也许有人可以提出更优雅的解决方案。

3 个答案:

答案 0 :(得分:2)

你走了。简单而优雅:

>>> list_1 = [1,1,2,3]
>>> list_2 = ['a','b','c','d']
>>> temp = dict(zip(list_1,list_2))
>>> result_1 = temp.keys()
>>> result_2 = temp.values()
>>> result_1
[1, 2, 3]
>>> result_2
['b', 'c', 'd']

由于词典创建了唯一键 - 您可以从zip()的第二个列表中获得相应值。

答案 1 :(得分:0)

你走了:

list_1, list_2 = zip((list_1[0], list_2[0]), *(item[:2] for item in zip(list_1[1:], list_2[1:], list_1) if item[0] != item[2]))
print list_1
print list_2

输出:

(0, 1, 3)
('a', 'b', 'd')

这是否比简单的for循环实现更清晰是另一回事。

答案 2 :(得分:0)

from collections import Counter

def find_duplicates(list_given):
    mycal = Counter(list_given)
    return [k for k in mycal.keys() if mycal[k]> 1]

list_1 = [1,1,2,3]
list_2 = ['a','b','c','d']
list_dup = find_duplicates(list_1)
for x in list_dup:
    if x in list_1:
        list_2.remove(list_2[list_1.index(x)])
print list_2
#['b','c','d']

#For simply removing duplicates from a python list:
# list_with_no_duplicates = list(set(list_with_duplicates))