有没有办法使用sort()方法或任何其他方法按列对列表进行排序?让我们说清单:
[
[John,2],
[Jim,9],
[Jason,1]
]
我想对它进行排序,看起来像这样:
[
[Jason,1],
[John,2],
[Jim,9],
]
这样做的最佳方法是什么?
编辑:
现在我遇到索引超出范围错误。我有一个二维数组,可以说1000行b 3列。我想根据第三列对其进行排序。这是正确的代码吗?
sorted_list = sorted(list_not_sorted, key=lambda x:x[2])
答案 0 :(得分:37)
是。 sorted
内置接受key
参数:
sorted(li,key=lambda x: x[1])
Out[31]: [['Jason', 1], ['John', 2], ['Jim', 9]]
请注意sorted
会返回一个新列表。如果要在原地排序,请使用列表的.sort
方法(方便地,也接受key
参数)。
或者,
from operator import itemgetter
sorted(li,key=itemgetter(1))
Out[33]: [['Jason', 1], ['John', 2], ['Jim', 9]]
答案 1 :(得分:8)
您可以使用带键的排序方法。
sorted(a, key=lambda x : x[1])
答案 2 :(得分:2)
您可以list.sort
使用其可选的key
parameter和lambda
expression:
>>> lst = [
... ['John',2],
... ['Jim',9],
... ['Jason',1]
... ]
>>> lst.sort(key=lambda x:x[1])
>>> lst
[['Jason', 1], ['John', 2], ['Jim', 9]]
>>>
这将按原样对列表进行排序。
请注意,对于大型列表,使用operator.itemgetter
而不是lambda
会更快:
>>> from operator import itemgetter
>>> lst = [
... ['John',2],
... ['Jim',9],
... ['Jason',1]
... ]
>>> lst.sort(key=itemgetter(1))
>>> lst
[['Jason', 1], ['John', 2], ['Jim', 9]]
>>>
答案 3 :(得分:1)
key
/ sort
的可选sorted
参数是一个函数。为每个项调用该函数,返回值确定排序的顺序
>>> lst = [['John', 2], ['Jim', 9], ['Jason', 1]]
>>> def my_key_func(item):
... print("The key for {} is {}".format(item, item[1]))
... return item[1]
...
>>> sorted(lst, key=my_key_func)
The key for ['John', 2] is 2
The key for ['Jim', 9] is 9
The key for ['Jason', 1] is 1
[['Jason', 1], ['John', 2], ['Jim', 9]]
将print
从函数中删除
>>> def my_key_func(item):
... return item[1]
这个函数很简单,可以将“inline”写成lambda函数
>>> sorted(lst, key=lambda item: item[1])
[['Jason', 1], ['John', 2], ['Jim', 9]]
答案 4 :(得分:1)
sorted(list, key=lambda x: x[1])
注意:这也适用于时间变量。
答案 5 :(得分:0)
下面的解决方案对我有用,如果需要的数字是浮点数。 解决方案:
table=sorted(table,key=lambda x: float(x[5]))
for row in table[:]:
Ntable.add_row(row)
'