如何使用大值创建小值列表

时间:2014-11-28 15:53:24

标签: python list sorting

我的程序目前需要用户输入("hello")。然后它保存输入的长度(5),并从条例值中创建一个列表,例如:

list = []
word = "hello"
for i, item in enumerate(word):
    list.append(ord(word[i]))

这给了我一个列表:[104, 101, 108, 108, 111]

从这个输出中我想尝试获得[1, 0, 2, 3, 4]

如果愿意,我想尝试增加'计数',即使数字重复也是如此。希望这更清楚一点,对不起,我很难解释我想要实现的目标。

提前致谢。

另一个例子是“@test123”,它会给出一个列表:

[64, 116, 101, 115, 116, 49, 50, 51, 64]

我想要的输出是:[4, 8, 5, 6, 7, 0, 1, 2, 3]。我真的不确定这是否可行,但如果我能管理它会很好。

2 个答案:

答案 0 :(得分:2)

l = []
word = "hello"
for i, item in enumerate(word):
    l.append(ord(word[i]))
    sorted(range(len(l)), key=lambda x:l[x])

<强>输出

[1, 0, 2, 3, 4]

答案 1 :(得分:1)

使用numpy.argsort

>>> import numpy as np
>>>
>>> list(np.argsort(np.argsort(list('hello'))))
[1, 0, 2, 3, 4]
>>> list(np.argsort(np.argsort(list('cadeb'))))
[2, 0, 3, 4, 1]

如果无法使用第三方模块,请使用以下argsort

>>> def argsort(xs):
...     return sorted(range(len(xs)), key=xs.__getitem__)
...
>>> argsort(argsort('hello'))
[1, 0, 2, 3, 4]
>>> argsort(argsort('cadeb'))
[2, 0, 3, 4, 1]