a_list = [[70,62],[31,62],[62,71],[70,31],[70,71],[31,71]]
我上面有一个清单。上面的每个列表都有两个元素,第一个元素总是小于第二个元素(例如:第一个列表为30&lt; 62) - 我不比较数字本身(当然30&lt; 62但是如果列表是( 62,30)所以它应该是62 <30)。所以根据我的清单,如何以有效的方式制作整个订单清单?我尝试手动编写,但我的代码运行错误,使用了许多if语句
结果应为:
[70,31,62,71]
比较每对清单后的每一对。
我尝试了3对列表如下:
sort = []
list = [[48, 33], [56, 33], [56, 48]]
for i in list[:-1]:
for j in list[1:]:
if i[0] == j[1]:
sort.extend([i[0],i[1],j[0]])
break
print(sort)
结果是[53,58,33] 但是对于更大的数字,我仍在检查。
答案 0 :(得分:0)
您所表达的问题是定向图。您可以使用networkx库来处理这些内容,如:
def sort_nodes(node_list):
import networkx as nx
graph = nx.DiGraph(node_list)
sorted_nodes = [y[1] for y in sorted(
(len(neighbors), node) for node, neighbors in graph.pred.items())]
return sorted_nodes
test_data = (
dict(
input=[[70, 62], [31, 62], [62, 71], [70, 31], [70, 71], [31, 71]],
desired_result=[70, 31, 62, 71]),
dict(
input=[[48, 33], [56, 33], [56, 48]],
desired_result=[56, 48, 33]),
)
import networkx as nx
for test in test_data:
nodes = sort_nodes(test['input'])
print(nodes)
assert nodes == test['desired_result']
[70, 31, 62, 71]
[56, 48, 33]
答案 1 :(得分:0)
>>> from collections import defaultdict
... from operator import itemgetter
...
...
... def solution(pairs_list):
... d = defaultdict(int)
... for a, b in pairs_list:
... d[a]
... d[b] += 1
...
... return [k for k, _ in sorted(d.items(), key=itemgetter(1))]
...
>>> a_list = [[70, 62], [31, 62], [62, 71], [70, 31], [70, 71], [31, 71]]
>>> solution(a_list)
[70, 31, 62, 71]
>>> b_list = [[48, 33], [56, 33], [56, 48]]
>>> solution(b_list)
[56, 48, 33]