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

Python:通过另一个列表的副本删除一个列表的条目,python,python-2.7,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\u2=[a,c,d]还是result\u2=[b,c,d] 当然,我可以用简单的for循环来解决这个问题,但我想也许有人能想出一个更优雅的解决方案。给你: list_

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

例如,从这两个列表中

list_1 = [1,1,2,3]
list_2 = [a,b,c,d]
我想生成这两个:

result_1 = [1,2,3]
result_2 = [a,c,d]
我不管是
result\u2=[a,c,d]
还是
result\u2=[b,c,d]

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

给你:

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循环实现更清晰是另一回事。

给你。简约典雅:

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))
>>> 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()

中获得第二个列表中的相应值。如果您有可用的代码,但需要一些帮助来提高效率/Pythonic,请参阅。如果你有坏代码,请张贴一份报告,并清楚说明问题所在。如果你没有代码,请写一些。好的,对不起。这是我关于Stackexchange的第一个问题,我还不熟悉所有的东西。我会在codereview中发布我的代码。这只在所有副本都在一个序列中时有效,对吗?请参阅我的编辑,我错过了第一个列表的要求。谢谢。是的,实际上使用simple for循环要简单得多。下一次我在发帖之前会想得更好!很抱歉