当前位置: 首页 > 知识库问答 >
问题:

根据从开始到结束的唯一出现对元组列表进行排序

张丰
2023-03-14

假设我有一个元组列表,如:

x = [(2, 18), (18, 5), (3, 2)]

如何根据元组中值的唯一出现对此元组列表进行排序?

例如,由于数字3只出现在元组(3,2)中,并且是元组的第一个值,因此它应该是列表中的第一个条目。该条目后面跟着(2,18),因为(3,2)的第二个值(2)出现在(2,18)的第一个值中。最后,列表中的最后一个条目应该是(18,5),因为它的第一个值与(2,18)的最后一个值匹配。

预期结果:

[(3, 2), (2, 18), (18, 5)]

如果您需要更多信息,请告诉我。

共有1个答案

闻人宏盛
2023-03-14

使用递归函数逐个挑选多米诺骨牌:

def get_elements_filtered_by_first_values(original_list, first_value):
   return [each_element for each_element in original_list if each_element[0] == first_value]

def add_next_domino(list_of_remained_dominos, list_of_picked_dominos):
   possible_domino_list_to_pick = get_elements_filtered_by_first_values(list_of_remained_dominos, list_of_picked_dominos[-1][1])
   if not len(possible_domino_list_to_pick):
      return None
   for each_possible_domino_to_pick in possible_domino_list_to_pick:
      new_list_of_picked_dominos = list_of_picked_dominos + [each_possible_domino_to_pick]
      new_list_of_remained_dominos = list_of_remained_dominos[:]
      new_list_of_remained_dominos.remove(each_possible_domino_to_pick)
      if not len(new_list_of_remained_dominos):
         return new_list_of_picked_dominos
      pick_domino_result = add_next_domino(new_list_of_remained_dominos, new_list_of_picked_dominos)
      if pick_domino_result is not None:
         return pick_domino_result
   return None

x = [(2, 18), (18, 5), (3, 2)]
eligible_elements = [each_element for each_element in x if each_element[0] not in map(lambda x: x[1], x)]
while len(eligible_elements):
   next_eligible_element = eligible_elements.pop()
   return_list = add_next_domino([each_element for each_element in x if each_element != next_eligible_element] ,[next_eligible_element])
   if return_list is not None:
      print(return_list)
      break

输出:

[(3, 2), (2, 18), (18, 5)]
 类似资料:
  • 我在一次采访中得到了这个问题。有一个与起始值和结束值关联的对象数组。与每个对象关联的计数是具有较大开始时间和较小结束时间的其他对象的数量。所以我必须找到每个物体的计数。 我想出了O(n^2)解决方案,首先我对开始值进行排序,然后用下一个对象的结束值检查每个对象的结束值以获得计数。有更好的算法来解决这个问题吗?

  • 问题内容: 我有一个这样的字符串列表: 使用Y中的值对X进行排序以获取以下输出的最短方法是什么? 具有相同“键”的元素的顺序无关紧要。我可以求助于for结构的使用,但我好奇是否有更短的方法。有什么建议么? 问题答案: 最短代码 例: 一般来说 解释: 两个。 创建一个新的,list基于zip使用排序sorted()。 使用列表推导从排序的,压缩的中提取每对的第一个元素list。

  • 问题内容: 我想对以下数据框进行排序: 我想对它进行排序,以便根据列表对LSE列进行重新排序: 当然,其他列也需要相应地重新排序。有没有办法在熊猫里做到这一点? 问题答案: pandas0.15版中对s的改进支持使您可以轻松做到这一点: 如果这只是临时排序,则可能不希望将LSE列保留为a ,但是如果您希望这种排序能够在不同的上下文中使用几次,则是一个很好的解决方案。 在更高版本的,中,已被替换为,

  • 问题内容: 从经验上讲,似乎Python的默认列表排序器在传递元组列表时将按每个元组中的第一个元素进行排序。那是对的吗?如果不是,按元组的第一个元素对元组列表进行排序的正确方法是什么? 问题答案: 它会自动按元组中的第一个元素对元组列表进行排序,然后按第二个元素进行排序,依此类推,tuple([1,2,3])将排在tuple([1,2,4])之前。如果要覆盖此行为,请将一个callable作为第二

  • 问题内容: 我有以下清单 我想根据其子列表的长度对列表进行排序。结果应为: 问题答案: 使用和中可用的参数。它指定一个参数的功能,该参数用于从每个列表元素中提取比较键

  • 问题内容: 我正在使用python 2.7.3,并且尝试根据另一个列表的值顺序对字典列表进行排序。 IE浏览器: 根据listOne中值的顺序对listTwo进行排序,结果如下: 我最终需要输出此文本,因此为正确显示(以正确的顺序)所做的工作如下: 是否有某种lambda表达式可用于实现此目的?必须有一种更紧凑,更简单的方法来按我想要的顺序来获取它。 问题答案: 最简单的方法是使用来为您的词典列表