我需要对列表进行排序,然后返回一个列表,其中包含列表中已排序项的索引.例如,如果我要排序的列表是[2,3,1,4,5],我需要[2,0,1,3,4]返回.
这个问题是在字节上发布的,但我想我会在这里重新发布. http://bytes.com/topic/python/answers/44513-sorting-list-then-return-index-sorted-item
我特别需要根据对象的属性对对象列表进行排序.然后,我需要重新排序相应的列表以匹配新排序列表的顺序.
有没有办法做到这一点?
我有一个数字数组,我想创建另一个数组,表示第一个数组中每个项目的排名.我正在使用Python和NumPy.
例如:
array = [4,2,7,1]
ranks = [2,1,3,0]
Run Code Online (Sandbox Code Playgroud)
这是我提出的最佳方法:
array = numpy.array([4,2,7,1])
temp = array.argsort()
ranks = numpy.arange(len(array))[temp.argsort()]
Run Code Online (Sandbox Code Playgroud)
有没有更好/更快的方法避免两次排序数组?
我试图了解该order()功能的工作原理.我的印象是它返回了索引的排列,当排序时,它会对原始向量进行排序.
例如,
> a <- c(45,50,10,96)
> order(a)
[1] 3 1 2 4
Run Code Online (Sandbox Code Playgroud)
我本来希望这会返回c(2, 3, 1, 4),因为排序的列表将是10 45 50 96.
有人能帮我理解这个函数的返回值吗?
在那里,做关于Python的内置函数python.array什么argsort()上呢numpy.array?
例如,我有这个二维数组:
[
[
0.0,
0.24320757858085434,
0.14893361727523413,
0.29786723455046826,
0.18838778030301612,
0.12160378929042717
],
[
0.23717478210768014,
0.0,
0.16770789675478251,
0.20539938644228997,
0.25981195646349819,
0.1299059782317491
],
[
0.21681956134183847,
0.250361664212574,
0.0,
0.23178986094050727,
0.16390018248131957,
0.13712873102376066
],
[
0.2933749527592357,
0.20744741852633861,
0.15681550844086434,
0.0,
0.18554661183269694,
0.15681550844086434
],
[
0.20305810393286577,
0.28716752453162431,
0.12135042758887897,
0.20305810393286577,
0.0,
0.18536584001376513
],
[
0.17877693623386351,
0.19584032147389943,
0.13848001934394774,
0.23407395508684939,
0.25282876786143976,
0.0
]
]
Run Code Online (Sandbox Code Playgroud)
它给出了概率集。如何找到每一行的最佳概率?还有什么方法可以在不改变元素位置的情况下找到例如第二、第三最佳概率?
您可以按长度对列表进行排序,如下所示:
l1 = [1,2,3]
l2 = [1,2,3]
l3 = [1,2]
lists = [l1, l2, l3]
sorted_lists = sorted(lists, key=len)
print sorted_lists #[[1,2], [1,2,3], [1,2,3]]
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何跟踪标记,然后匹配sorted_lists原始列表名称的内容l1,l2和l3.
这很接近,但我不确定在按长度排序时如何实现解决方案.
我有一个简单的值列表,我需要其中的索引按原始值顺序(最大到最小)排序。
我们假设列表是
maxList = [7, 3, 6, 9, 1, 3]
Run Code Online (Sandbox Code Playgroud)
结果应该是:
indexedMaxList = [3, 0, 2, 1, 5, 4]
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试过的:
def ClusteringOrder(maxList):
sortedMaxList = maxList.copy()
sortedMaxList.sort(reverse=True)
indexedMaxList = []
for i in range(len(maxList)):
indexedMaxList.append(maxList.index(sortedMaxList[i]))
return(indexedmaxList)
Run Code Online (Sandbox Code Playgroud)
问题很明显,这样做会返回第一次出现重复值的索引。在这种情况下,双 3 将返回 1 两次,因此结果将是:
indexedMaxList = [3, 0, 2, 1, 1, 4]
Run Code Online (Sandbox Code Playgroud)
有没有什么简单的方法可以恢复实际位置?
我想知道Python中deque的get操作的时间复杂性.
我知道它是作为Python中的双重链接实现的.这是否意味着它的时间复杂度是O(n)?
我有一个列表,其元素是带有值和类型字段的字典,即:
my_list = [{'val':5, 'type':0},{'val':6, 'type':2},{'val':2, 'type':1},{'val':9, 'type':0}]
Run Code Online (Sandbox Code Playgroud)
我想基于该type字段以降序对列表进行排序,并基于该字段在每种类型中对列表进行排序value,并获得一个具有相应排序索引和排序矢量的矢量。
我知道如何使用lambda函数针对单个条件执行此操作,即:
sorted_list = sorted(my_list, key=lambda k: k['type'], reverse=True)
Run Code Online (Sandbox Code Playgroud)
但是如何将其扩展到多个条件?
所需输出:
sorted_list = [{'val':6, 'type':2},{'val':2, 'type':1},{'val':9, 'type':0},{'val':5, 'type':0}]
sorted_idxs = [1, 2, 3, 0]`, such that `[my_list[k] for k in sorted_idxs]==sorted_list
Run Code Online (Sandbox Code Playgroud) 我知道这个问题已经问了一百次了,但答案似乎总是“使用 numpy 的 argsort”。但是,要么我误解了大多数人的要求,要么问题的答案不正确。无论如何,我希望获得列表升序的索引。措辞令人困惑,因此举个例子,给定一个列表,[4, 2, 1, 3]我希望得到一个列表[3, 1, 0, 2]。最小的项目是1,所以它得到索引0,最大的项目是,4所以它得到索引3。在我看来,argsort经常有人建议这样做,但似乎并没有这样做。
from numpy import argsort
l = [4, 2, 1, 3]
print(argsort(l))
# [2, 1, 3, 0]
# Expected [3, 1, 0, 2]
Run Code Online (Sandbox Code Playgroud)
很明显 argsort 正在做其他事情,那么它实际上在做什么,它与预期的行为有何相似之处,以至于它经常(错误地)被建议?而且,更重要的是,我怎样才能获得所需的输出?
全部,
我正在努力通过单个键对包含每个键的多个值的字典进行排序。我有以下字典
{
'time': [2, 1, 3],
'x_coordinates': [3, 5, 4],
'y_coordinates': [6, 7, 8]
}
Run Code Online (Sandbox Code Playgroud)
并希望将以下内容作为输出:
{
'time': [1, 2, 3],
'x_coordinates': [5, 3, 4],
'y_coordinates': [7, 6, 8]
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能以最有效的方式实现这一目标?我曾尝试在互联网上寻求建议,但没有关于按单个键对多值键进行排序的内容。任何帮助将不胜感激。
我有一个简单的清单:
a = [8, 5, 2, 20, 13, 14, 17, 13, 15, 21]
Run Code Online (Sandbox Code Playgroud)
我可以在列表中获得5个最大值:
sorted(a)[-5:]
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到列表中5个最大值的索引?
因此,列表的5个最大值是[14, 15, 17, 20, 21],这些是索引[9, 3, 6, 8, 5].我敢肯定,如果存在重复值,可以考虑多种策略,如果它们接近其他大值,则可以给出它们的索引.
python ×12
sorting ×7
list ×4
numpy ×4
python-3.x ×3
arrays ×1
big-o ×1
deque ×1
dictionary ×1
indexing ×1
indices ×1
lambda ×1
max ×1
nested-lists ×1
python-2.7 ×1
r ×1
r-faq ×1
slice ×1