排序2D列表python

Chi*_*era 18 python sorting list

我有以下类型的列表

lst = [
    [1, 0.23],
    [2, 0.39],
    [4, 0.31],
    [5, 0.27],
]
Run Code Online (Sandbox Code Playgroud)

我想按第二列的降序对此进行排序.我在python中试过'sorted'函数.但是给我一个'TypeError':'float'对象是unsubscriptable.请帮我解决这个问题.

daw*_*awg 33

你可以使用lambda:

>>> li=[[1, 0.23],
... [2, 0.39],
... [4, 0.31],
... [5, 0.27]]
>>> sorted(li,key=lambda l:l[1], reverse=True)
[[2, 0.39], [4, 0.31], [5, 0.27], [1, 0.23]]
Run Code Online (Sandbox Code Playgroud)

或者另一种方式:

>>> sorted(li,key=lambda l:l[1])
[[1, 0.23], [5, 0.27], [4, 0.31], [2, 0.39]]
Run Code Online (Sandbox Code Playgroud)

  • lambda 是 Python 中的一个小型匿名函数。“l” 是 lambda 的参数,由函数体用“:”分隔。`l[1]` 获取传递给 lambda 的列表并返回第二项(下标 `[1]` 是第二项...) (2认同)

Mar*_*ers 14

要对第二列上的列表列表进行排序,请使用operator.itemgetter()以方便和清晰:

from operator import itemgetter
outputlist = sorted(inputlist, key=itemgetter(1), reverse=True)
Run Code Online (Sandbox Code Playgroud)

或者,就地排序:

from operator import itemgetter
inputlist.sort(key=itemgetter(1), reverse=True)
Run Code Online (Sandbox Code Playgroud)

itemgetter()比使用a更快一点lambda.

演示:

>>> from operator import itemgetter
>>> inputlist = [
...     [1, 0.23],
...     [2, 0.39],
...     [4, 0.31],
...     [5, 0.27],
... ]
>>> sorted(inputlist, key=itemgetter(1), reverse=True)
[[2, 0.39], [4, 0.31], [5, 0.27], [1, 0.23]]
Run Code Online (Sandbox Code Playgroud)

如果直接在输入列表中有浮点值,则只会看到异常:

>>> inputlist.append(4.2)
>>> inputlist
[[1, 0.23], [2, 0.39], [4, 0.31], [5, 0.27], 4.2]
>>> sorted(inputlist, key=itemgetter(1), reverse=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'float' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

(对于Python 3; Python 2的错误消息略有不同,导致TypeError: 'float' object has no attribute '__getitem__'相反).

这是因为itergetter(1)调用应用于外部列表中的所有元素,但仅适用于嵌套的有序序列,而不适用于现在添加的一个浮点值.

  • @ChinthakaNadunRatnaweera:不,那么你的列表不是嵌套的。您在外部列表中*直接*引用了浮点值。打印您的列表并将其复制到您的问题中。 (2认同)