我试图创建一个函数,它计算每个数字的数量 元素小于它(这是数字的秩),然后将数字放入排序列表中的秩中。假设我有一张清单
L=(4,7,9,10,6,11,3)
我想要的是一个对应的列表
K=(1,3,4,5,2,6,0)
其中,元素K[i]具有L中对应位置元素的“秩”值。我编写了以下代码:
def sort_by_rank(lst):
for i in range(len(lst)):
# rank = how many elements are smaller than lst[i]?
rank = 0
for elem in lst:
if elem < lst[i]:
rank += 1
lst[rank] = lst[i]
return lst
但它有一个我无法调试的bug
更简单的方法是创建列表的排序副本,然后获取索引:
现在,这是一种幼稚的方法,它对像您这样的小列表非常有效,但是对于长列表,它会很慢,因为
list.index
相对来说比较慢,而且它被反复运行为了提高效率,可以使用
enumerate
生成元素索引对的dict。dict中的查找比list.index
快得多在这里,我还将
L
转换为一个集合,以防重复,否则以后的出现将覆盖早期出现的索引为了获得更有效的方法,您可以使用
enumerate
为要一起排序的项创建索引,然后使用另一个enumerate
为排序序列创建索引,以将旧索引映射到已排序的索引作为dict,然后在列表范围内迭代索引,以在列表中输出新索引:这将产生:
首先,您的
L
和K
不是列表,而是元组。您的代码可能出现错误,因为您试图修改元组中的值您可以使用
map
函数将每个元素映射到小于它的数字量知道当计算
True
和False
之和时,True
与1相同,而False
与0相同。通过计算新列表的总和,其中每个元素都是True
/False
,这取决于项是否大于数字,我们基本上是在计算列表中有多少True
,这应该是您要问的我的道歉,没有看到你需要的部分,你的编号按等级排序。您可以使用
key
参数对其进行排序其中
L
中的每个元素都转换为元组(原始的_值,其_秩)相关问题 更多 >
编程相关推荐