Python小技巧——数组关联排序(数组B按照数组A排序)

有时候会遇到将B数组按照A数组进行排序的情况,尤其是在写程序统计频率的时候。之前遇到过一次,然后情急之下是采用的冒泡排序算法,后进行关联排序。这样效率太低了。今天有幸看到了一位博主的解法,就是用ZIP来进行数组压缩,再完成排序。下面分别把这个方法演示一下,还有就是展示一下实战效果。


1.简单用法

A = ['a', 'b', 'c', 'd', 'e']  # 出现的元素
B = [1, 5, 0, 45, 78]  # 元素出现的次数(统计结果)

Z = zip(B, A)  # 对AB进行封装,把频率放在前面
Z = sorted(Z, reverse=True)  # 进行逆序排列
B, A = zip(*Z)  # 进行解压,其中的AB已经按照频率排好
for i,j in zip(B, A):
    print(i,'\t',j)

最终结果:

78 	 e
45 	 d
5 	 b
1 	 a
0 	 c

需要注意的地方是:

1.封装时要将频率放在前面

2.解压的时候Z前面有个*

2.实战演练

在构建知识图谱时,对文章进行三元组抽取后要进行关系统计,已经将所有的关系找了出来,并且统计了频率。

好了,现在就是要对频率进行逆序排列,用这个方法:

for i in relationship:
    if i not in words:
        words.append(i)
        times.append(1)
    else:
        times[words.index(i)] = times[words.index(i)] + 1
print(words)
print(times)
Z = zip(times, words)
Z = sorted(Z, reverse=True)
print(Z)
times, words = zip(*Z)
for i, j in zip(times, words):
    print(i, '\t', j)

最终结果:

1733 	 SameAs
1102 	 是
600 	 包括
549 	 有
520 	 为
253 	 出现
202 	 可见
192 	 如
153 	 可出现
138 	 呈
128 	 可有
121 	 无
100 	 显示
100 	 导致
95 	 分为

知识图谱抽取效果图:

 

 

发布了41 篇原创文章 · 获赞 43 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览