如何从列表列表中删除包含重复值的列表:

我需要从此列表中删除“重复项”:

[[4, 1], [1, 4], [0, 5], [5, 0]]

例如:[4, 1] [1, 4]是同一个对象,我需要删除其中一个。

如何在不使用列表理解工具的情况下做到这一点?


阿晨1998
浏览 195回答 3
3回答

婷婷同学_

根据评论,您不想使用list comprehension,sort并且子列表中始终有 2 个元素,那么以下方法会有所帮助,它遍历列表并反转子列表并检查它们是否存在于 new_listx = [[4, 1], [1, 4], [0, 5], [5, 0]]new_list = []for i in x:    if i[::-1] not in new_list and i not in new_list:        new_list.append(i)print(new_list)输出:[[4, 1], [0, 5]]

守着一只汪

一种方法是对它进行排序,如果最终列表中不存在,则像 LogicalBranch 在答案中提到的那样进行追加。你提到你不能使用sort并且2列表中总是有元素。然后,您可以通过制作另一个与列表相反的列表并在最终答案中进行比较来做一个简单的技巧。看下面的代码ans = []l = [[4, 1], [1, 4], [0, 5], [5, 0]]for x in l:    a = x[::-1]    if x not in ans and a not in ans:        ans.append(x)print(ans) # [[4, 1], [0, 5]]

梵蒂冈之花

实现此目的的最简单方法(不导入任何内容)是在将列表中的每一对添加到新结果列表之前对其进行排序,如下所示:result = []for pair in [[4, 1], [1, 4], [0, 5], [5, 0]]:  pair.sort()  if pair not in result:    result.append(pair)print(result)您甚至可以将其转换为函数:def list_filter(collection):  result = []  for pair in collection:    pair.sort()    if pair not in result:      result.append(pair)  return result然后你会像这样使用它:list_filter([[4, 1], [1, 4], [0, 5], [5, 0]])这应该返回一个如下所示的列表:[[1, 4], [0, 5]]编辑:没有排序的更新方法:(result, collection) = ([], [[4, 1], [1, 4], [0, 5], [5, 0]])def check(n1, n2):  for pair in collection:    if n1 in pair and n2 in pair and sorted(pair) in collection:      return True  return Falsefor pair in collection:  pair.sort()  if pair not in result:    result.append(pair)print(result)您甚至可以将其转换为函数:def new_filter_function(collection):  result = []  def check(n1, n2):    for pair in collection:      if n1 in pair and n2 in pair and ([n1, n2] in collection or [n2, n1] in collection):        return True    return False  for pair in collection:    if pair not in result:      result.append(pair)  return result然后你会像这样使用它:new_filter_function([[4, 1], [1, 4], [0, 5], [5, 0]])它还应该返回一个如下所示的列表:[[1, 4], [0, 5]]祝你好运。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python