在下面的代码中,我有两组数据被链接在一起-5个“网络”和5个通过“ TT”值的奇异结果。每个TT值对应一个网络集(例如TT1 = 100是来自network1的结果)。
我的目标是能够根据TT结果对5个网络进行排名。
network1 = [0,1,0,0,0,0,1,0,0,0,1,1,0,0,1]
network2 = [0,1,0,0,0,0,0,0,1,0,1,1,0,0,1]
network3 = [0,1,0,0,0,0,0,1,0,0,1,1,0,0,1]
network4 = [0,1,0,0,0,0,0,0,0,0,1,1,0,1,1]
network5 = [0,1,1,0,0,0,0,0,0,0,1,1,0,0,1]
networks = [network1, network2, network3, network4, network5]
TT1 = 100
TT2 = 70
TT3 = 80
TT4 = 105
TT5 = 120
TTranks = [TT1,TT2,TT3,TT4,TT5]
s = {x: i for i, x in enumerate(sorted(set(TTranks)))}
ranks = [s[x] for x in TTranks]
print(ranks)
此过程的以下结果仅排名TT值,尽管我不确定如何链接它,以便对相应的网络也进行适当排名。
[2, 0, 1, 3, 4]
也就是说,我希望对5个网络进行排名,分别为network2,network3,network1,network4,network5。 这将非常有用,因为我希望以后可以从有序的网络结果中致电。
此外,还有一种更有效的方法来完成此过程吗?
感谢所有帮助!
答案 0 :(得分:1)
您可以使用key
/ sort
函数的sorted
可选参数来根据自定义值进行排序。
network1 = [0,1,0,0,0,0,1,0,0,0,1,1,0,0,1]
network2 = [0,1,0,0,0,0,0,0,1,0,1,1,0,0,1]
network3 = [0,1,0,0,0,0,0,1,0,0,1,1,0,0,1]
network4 = [0,1,0,0,0,0,0,0,0,0,1,1,0,1,1]
network5 = [0,1,1,0,0,0,0,0,0,0,1,1,0,0,1]
networks = [network1, network2, network3, network4, network5]
TT1 = 100
TT2 = 70
TT3 = 80
TT4 = 105
TT5 = 120
TT = [TT1, TT2, TT3, TT4, TT5]
sorted_networks_with_indices = sorted(enumerate(networks), key=lambda t: TT[t[0]])
sorted_indices = [i for i,n in sorted_networks_with_indices]
sorted_networks = [n for i,n in sorted_networks_with_indices]
print(sorted_indices)
print(sorted_networks)
[1, 2, 0, 3, 4]
[[0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1],
[0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1],
[0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1],
[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1]]
enumerate(networks)
列出对i,n
,其中i
是索引,n
是网络。这些对使用sorted
函数进行排序,用于排序的键为lambda t: TT[t[0]]
。这里t
是对i,n
,因此t[0]
是索引i
。因此,TT[t[0]]
是对应于索引网络对t
的TT。
sorted_indices
中的索引是[1, 2, 0, 3, 4]
而不是[2, 3, 1, 4, 5]
,因为python列表是0索引的,但这对应于network2,network3,network1,network4,network5。如果您不满意,可以将相关行替换为:
sorted_indices = [i+1 for i,n in sorted_networks_with_indices]
sorted
函数及其key
参数:https://docs.python.org/3/library/functions.html#sorted sort
的{{1}}成员及其list
自变量:https://docs.python.org/3/library/stdtypes.html#list.sort 答案 1 :(得分:0)
您能否解释一下网络和TTrank的连接方式?该代码显示对这两个没有依赖性。
您只是想要索引来排序TTrank?然后,您应该避免使用set(TTranks),因为定单不会保留在集中,所以重复项也会被删除。有几种获取排序索引的方法,我更喜欢numpy的argsort:
import numpy as np
print(np.argsort(TTranks))
# [1 2 0 3 4]