Python 按平均值对元组排序
我有一个元组,当前看起来如下所示:Python 按平均值对元组排序,python,sorting,tuples,Python,Sorting,Tuples,我有一个元组,当前看起来如下所示: [['Hussain', 7, 8, 0], ['Max', 3, 4, 3], ['Alexandra', 10, 9, 8]] 我希望能够对这个元组进行排序,以便它按照从最高到最低的平均顺序打印出元组。这就是我所期望的结果: ['Alexandra', 9],['Hussain', 5],['Max', 3.3333333333] 我将非常感谢您给予的任何帮助 短暂性脑缺血发作 如果您没有使用python>=3.4,则可以手动执行平均值计算 print
[['Hussain', 7, 8, 0], ['Max', 3, 4, 3], ['Alexandra', 10, 9, 8]]
我希望能够对这个元组进行排序,以便它按照从最高到最低的平均顺序打印出元组。这就是我所期望的结果:
['Alexandra', 9],['Hussain', 5],['Max', 3.3333333333]
我将非常感谢您给予的任何帮助
短暂性脑缺血发作
如果您没有使用python>=3.4,则可以手动执行平均值计算
print(sorted(([ele[0],sum((ele[1:])) / len(l) - 1] for ele in l),key=itemgetter(1),reverse=True))
ele[0],mean(ele[1:])
取名称和剩余的元素作为分数,然后使用itemgetter(1)
作为分数/秒元素进行排序,并将reverse=True
设置为从高到低
我还将使用itertools.islice
获取切片,以避免使用常规切片构建新列表:
from itertools import islice
print(sorted(([ele[0],mean(islice(ele,1,None))] for ele in l),key=itemgetter(1),reverse=True))
或不使用平均值:
from itertools import islice
print(sorted(([ele[0],sum(islice(ele,1,None)) / len(l) - 1] for ele in l),key=itemgetter(1),reverse=True))
如果您没有使用python>=3.4,则可以手动执行平均值计算
print(sorted(([ele[0],sum((ele[1:])) / len(l) - 1] for ele in l),key=itemgetter(1),reverse=True))
ele[0],mean(ele[1:])
取名称和剩余的元素作为分数,然后使用itemgetter(1)
作为分数/秒元素进行排序,并将reverse=True
设置为从高到低
我还将使用itertools.islice
获取切片,以避免使用常规切片构建新列表:
from itertools import islice
print(sorted(([ele[0],mean(islice(ele,1,None))] for ele in l),key=itemgetter(1),reverse=True))
或不使用平均值:
from itertools import islice
print(sorted(([ele[0],sum(islice(ele,1,None)) / len(l) - 1] for ele in l),key=itemgetter(1),reverse=True))
感谢您的快速响应,我真的很感激:)ele是python语法吗?或者它是你用来作为索引的东西。@Hussain,它只是一个变量名,你可以随意调用它Hanks只是想澄清一下我了解
itertools.islice的用法,但是你在这里拆分了哪些部分?谢谢你的快速响应,我真的很感激:)ele是python语法吗?或者它是你用作索引的东西。@Hussain,它只是一个变量名,你可以随意调用它Hanks只是想澄清一下我了解itertools.islice的用法,但是你在这里拆分哪些部分?顺便说一句,你有一个列表而不是元组哦,对了,那么列表和元组的区别是什么呢我完全忘记了。看看这篇文章,了解一下它们的区别:顺便说一句,你有一个列表而不是元组哦,对了,那么列表和元组的区别是什么呢我完全忘了。看看这篇文章,了解一下它们的区别:排序需要一个可数。我使用列表理解给出排序后的第一个参数:[[e[0],s中e的sum(e[1:])/len(e[1:])=>[[[Hussain',5.0],'Max',3.3335],'Alexandra',9.0]]我使用timeit查看我们的函数之间的比较。当number=10000时,您的答案为:1.5141523819997929我的答案为:0.0845054299980826您的第一个答案:从统计导入平均值从运算符导入itemgetter排序([ele[0],mean(ele[1:]),对于l中的ele,key=itemgetter(1),reverse=True)导入可能会减慢它。不管怎样,我的答案有什么问题?它很快,一行,清晰,列表理解很好。老兄,你为什么要删除你的评论?排序需要一个iterable。我使用列表理解给出排序后的第一个参数:[[e[0],s中e的sum(e[1:])/len(e[1:])=>[[[Hussain',5.0],'Max',3.3335],'Alexandra',9.0]]我使用timeit查看我们的函数之间的比较。当number=10000时,您的答案为:1.5141523819997929我的答案为:0.0845054299980826您的第一个答案:从统计导入平均值从运算符导入itemgetter排序([ele[0],mean(ele[1:]),对于l中的ele,key=itemgetter(1),reverse=True)导入可能会减慢它。不管怎样,我的答案有什么问题?它很快,一行,清晰,列表理解很好。老兄,你为什么要删除你的评论?