根据从开头到结尾的唯一出现次数对元组列表进行排序

13 浏览
0 Comments

根据从开头到结尾的唯一出现次数对元组列表进行排序

假设我有一个包含元组的列表,如下所示:

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

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

0
0 Comments

问题的出现原因是要对一个元组列表进行排序,排序的规则是根据元组中第一个值的唯一出现来排序,即从列表的开头到结尾。

解决方法是使用递归函数逐个选择骨牌。首先定义一个函数`get_elements_filtered_by_first_values`,用于获取原始列表中第一个值与指定值相等的元素。然后定义一个函数`add_next_domino`,用于选择下一个骨牌。在该函数中,通过调用`get_elements_filtered_by_first_values`获取剩余骨牌中第一个值与已选骨牌列表中最后一个骨牌的第二个值相等的所有可能骨牌。如果没有可选择的骨牌,则返回None。遍历每个可能选择的骨牌,将其添加到已选骨牌列表中,并从剩余骨牌列表中移除该骨牌。如果剩余骨牌列表为空,则返回新的已选骨牌列表。否则,递归调用`add_next_domino`函数。如果递归调用返回的结果不为None,则返回该结果。最后,定义一个变量x表示元组列表,通过筛选出第一个值不在x中的元素得到eligible_elements列表。然后循环遍历eligible_elements列表,每次取出一个元素,调用`add_next_domino`函数进行骨牌选择。如果返回的结果不为None,则打印该结果,并结束循环。

输出结果为[(3, 2), (2, 18), (18, 5)],即按照唯一出现的规则排序后的元组列表。

0