使用列表理解从列表中删除重复项导致所有无
Removing duplicate from list using list comprehension lead to all Nones
我尝试使用以下代码使用列表理解从列表中删除重复项
lists = [1, 2, 2, 3, 4, 3, 5, 6, 1]
unique_lists = []
[unique_lists.append(x) for x in lists if x not in unique_lists]
print(unique_lists)
unique_lists = []
g = [unique_lists.append(x) for x in lists if x not in unique_lists]
print(g)
打印结果如下图
[1, 2, 3, 4, 5, 6]
[None, None, None, None, None, None]
我想了解为什么使用第二种方法(只需将列表分配给 g,returns 所有 None?谢谢。
因为list.append()
总是returnsNone。做你想做的最简单的方法是将它转换成一个集合。
unique_lists = list(set(lists))
list.append
returnsNone
。你可以做的是使用一组来记住唯一的数字:
lists = [1, 2, 2, 3, 4, 3, 5, 6, 1]
uniques = set()
unique_lists = [x for x in lists if not (x in uniques or uniques.add(x))]
或者更有效的方法是使用 dict 的行为类似于集合,同时保持插入顺序(在 python3+ 中):
unique_lists = list(dict.fromkeys(lists))
您还可以查看 this question 了解更多 answers/explanation 如何从列表中删除重复项。
使用集合 select 每个不同元素的第一次出现将比列表更有效。您甚至可以将此控件集嵌入理解中:
g = [x for s in [set()] for x in lists if x not in s and not s.add(x)]
如果您不关心性能,您可以 select 根据首次出现的索引来选择项目:
g = [x for i,x in enumerate(lists) if i==lists.index(x)]
还有一个技巧可以使用字典:
g = list(dict(zip(lists,lists)))
我尝试使用以下代码使用列表理解从列表中删除重复项
lists = [1, 2, 2, 3, 4, 3, 5, 6, 1]
unique_lists = []
[unique_lists.append(x) for x in lists if x not in unique_lists]
print(unique_lists)
unique_lists = []
g = [unique_lists.append(x) for x in lists if x not in unique_lists]
print(g)
打印结果如下图
[1, 2, 3, 4, 5, 6]
[None, None, None, None, None, None]
我想了解为什么使用第二种方法(只需将列表分配给 g,returns 所有 None?谢谢。
因为list.append()
总是returnsNone。做你想做的最简单的方法是将它转换成一个集合。
unique_lists = list(set(lists))
list.append
returnsNone
。你可以做的是使用一组来记住唯一的数字:
lists = [1, 2, 2, 3, 4, 3, 5, 6, 1]
uniques = set()
unique_lists = [x for x in lists if not (x in uniques or uniques.add(x))]
或者更有效的方法是使用 dict 的行为类似于集合,同时保持插入顺序(在 python3+ 中):
unique_lists = list(dict.fromkeys(lists))
您还可以查看 this question 了解更多 answers/explanation 如何从列表中删除重复项。
使用集合 select 每个不同元素的第一次出现将比列表更有效。您甚至可以将此控件集嵌入理解中:
g = [x for s in [set()] for x in lists if x not in s and not s.add(x)]
如果您不关心性能,您可以 select 根据首次出现的索引来选择项目:
g = [x for i,x in enumerate(lists) if i==lists.index(x)]
还有一个技巧可以使用字典:
g = list(dict(zip(lists,lists)))