根据从头到尾的唯一出现对元组列表进行排序
Sort list of tuples based on unique occurrence from beginning to end
假设我有一个元组列表,例如:
x = [(2, 18), (18, 5), (3, 2)]
如何根据元组中值的唯一出现对这个元组列表进行排序?
例如,由于数字 3 仅出现在元组 (3, 2)
中并且是元组的 first 值,因此它应该是列表中的第一个条目.此条目后跟 (2, 18)
,因为 (3, 2)
的第二个值 (2) 出现在 (2, 18)
的第一个值中。最后,列表中的最后一个条目应该是 (18, 5)
,因为它的第一个值与 (2, 18)
.
的最后一个值相匹配
预期结果:
[(3, 2), (2, 18), (18, 5)]
如果您需要更多信息,请告诉我。
使用递归函数一张一张地挑选多米诺骨牌:
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)]
假设我有一个元组列表,例如:
x = [(2, 18), (18, 5), (3, 2)]
如何根据元组中值的唯一出现对这个元组列表进行排序?
例如,由于数字 3 仅出现在元组 (3, 2)
中并且是元组的 first 值,因此它应该是列表中的第一个条目.此条目后跟 (2, 18)
,因为 (3, 2)
的第二个值 (2) 出现在 (2, 18)
的第一个值中。最后,列表中的最后一个条目应该是 (18, 5)
,因为它的第一个值与 (2, 18)
.
预期结果:
[(3, 2), (2, 18), (18, 5)]
如果您需要更多信息,请告诉我。
使用递归函数一张一张地挑选多米诺骨牌:
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)]