在Python中按数量对多个列表的元素进行排名
我想根据元素在每个列表中出现的频率对多个列表进行排名。示例:
列表 1 = 1,2,3,4
列表2 = 4,5,6,7
list3 = 4,1,8,9
结果 = 4,1,2,3,4,5,6,7,8 (4 计算三次,1 计算两次,其余一次)
我尝试过以下,但我需要一些更智能的东西,以及我可以对任意数量的列表执行的操作。
l = []
l.append([ 1, 2, 3, 4, 5])
l.append([ 1, 9, 3, 4, 5])
l.append([ 1, 10, 8, 4, 5])
l.append([ 1, 12, 13, 7, 5])
l.append([ 1, 14, 13, 13, 6])
x1 = set(l[0]) & set(l[1]) & set(l[2]) & set(l[3])
x2 = set(l[0]) & set(l[1]) & set(l[2]) & set(l[4])
x3 = set(l[0]) & set(l[1]) & set(l[3]) & set(l[4])
x4 = set(l[0]) & set(l[2]) & set(l[3]) & set(l[4])
x5 = set(l[1]) & set(l[2]) & set(l[3]) & set(l[4])
set1 = set(x1) | set(x2) | set(x3) | set(x4) | set(x5)
a1 = list(set(l[0]) & set(l[1]) & set(l[2]) & set(l[3]) & set(l[4]))
a2 = getDifference(list(set1),a1)
print a1
print a2
现在问题来了...我可以用a3,a4和a5一次又一次地做,但是它太复杂了,我需要一个函数来完成这个...但我不知道如何...我的数学被卡住了;)
已解决:非常感谢您的讨论。作为一个新手,我喜欢这个系统:快速+信息丰富。你帮了我所有的忙!泰
I want to rank multiple lists according to their elements how often they appear in each list. Example:
list1 = 1,2,3,4
list2 = 4,5,6,7
list3 = 4,1,8,9
result = 4,1,2,3,4,5,6,7,8 (4 is counted three times, 1 two times and the rest once)
I've tried the following but i need something more intelligent and something i can do with any ammount of lists.
l = []
l.append([ 1, 2, 3, 4, 5])
l.append([ 1, 9, 3, 4, 5])
l.append([ 1, 10, 8, 4, 5])
l.append([ 1, 12, 13, 7, 5])
l.append([ 1, 14, 13, 13, 6])
x1 = set(l[0]) & set(l[1]) & set(l[2]) & set(l[3])
x2 = set(l[0]) & set(l[1]) & set(l[2]) & set(l[4])
x3 = set(l[0]) & set(l[1]) & set(l[3]) & set(l[4])
x4 = set(l[0]) & set(l[2]) & set(l[3]) & set(l[4])
x5 = set(l[1]) & set(l[2]) & set(l[3]) & set(l[4])
set1 = set(x1) | set(x2) | set(x3) | set(x4) | set(x5)
a1 = list(set(l[0]) & set(l[1]) & set(l[2]) & set(l[3]) & set(l[4]))
a2 = getDifference(list(set1),a1)
print a1
print a2
Now here is the problem... i can do it again and again with a3,a4 and a5 but its too complex then, i need a function for this... But i don't know how... my math got stuck ;)
SOLVED: thanks alot for the discussion. As a newbee i like this system somehow: fast+informative. You helped me all out! Ty
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
现在让我们概括它(采用任何可迭代、放宽可散列要求),允许键和反向参数(以匹配排序),并将其重命名为 freq_sorted:
示例:
Now let's generalize it (to take any iterable, loosen hashable requirement), allow key and reverse parameters (to match sorted), and rename to freq_sorted:
Example:
结合已经发布的几个想法:
注意:
Counter
而不是defaultdict(int)
。Combining a couple of ideas already posted:
Notes:
Counter
instead ofdefaultdict(int)
.试试这个:
使用示例:
您可以使用任意数量的列表作为输入
Try this one:
Usage example:
You can use any number of lists as input
您可以计算每个元素的出现次数(直方图),然后按其排序:
You can count the number of appearances of each element (a histogram), then sort by it:
试试这个代码:
注意:你的列表应该是可散列类型
Try this code:
Note: Your lists should be hashable type