Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对列表进行排序_Python_Sorting - Fatal编程技术网

Python 对列表进行排序

Python 对列表进行排序,python,sorting,Python,Sorting,因此,我有一个如下列表: points = [[0, 0], [5, 3], [0, 5], [0, 2], [1, 3], [5, 3]] 我一直在使用 points.sort(key=lambda pair: pair[0]) 对列表进行排序。但这只按第一个值排序,而不看第二个值 该代码的结果如下所示: [[0, 0], [0, 5], [0, 2], [1, 3], [5, 3], [5, 3]] 但是,我想排序的结果是: [[0, 0], [0, 2], [0, 5], [1, 3

因此,我有一个如下列表:

points = [[0, 0], [5, 3], [0, 5], [0, 2], [1, 3], [5, 3]]
我一直在使用

points.sort(key=lambda pair: pair[0])
对列表进行排序。但这只按第一个值排序,而不看第二个值

该代码的结果如下所示:

[[0, 0], [0, 5], [0, 2], [1, 3], [5, 3], [5, 3]]
但是,我想排序的结果是:

[[0, 0], [0, 2], [0, 5], [1, 3], [5, 3], [5, 3]]
我该怎么做

另外,当我们在做这件事时,我如何从这个列表中删除重复项?最终结果应该是:

[[0, 0], [0, 2], [0, 5], [1, 3], [5, 3]]
试试itemgetter

from operator import itemgetter
sorted(points, key=itemgetter(0, 1))

您可以有一个排序键,它首先按第一个元素
x[0]
排序,如果它们是并列的,则按第二个元素
x[1]
排序:

>>> points = [[0, 0], [5, 3], [0, 5], [0, 2], [1, 3], [5, 3], [0, 4]]
>>> sorted(points, key = lambda x: (x[0], x[1]))
[[0, 0], [0, 2], [0, 4], [0, 5], [1, 3], [5, 3], [5, 3]]
如果您不希望此最终列表中有任何重复项,则可以执行以下操作:

points = [[0, 0], [5, 3], [0, 5], [0, 2], [1, 3], [5, 3]]

sorted_lst = sorted(points, key = lambda x: (x[0], x[1]))

seen = set()
no_dups = []
for lst in sorted_lst:
    curr = tuple(lst)
    if curr not in seen:
        no_dups.append(lst)
        seen.add(curr)

print(no_dups)
# [[0, 0], [0, 2], [0, 5], [1, 3], [5, 3]]
它有一个集合
seen
,跟踪添加了哪些子列表,以及一个列表
no_dups
,其中添加了列表。如果某个元素不在
seen
中,则将其添加到最终列表中,并将其添加到
seen
,这表示该元素已被添加

此外,由于type
list
不是可散列类型,因此不能将它们直接添加到集合中。在上面的代码中,列表被转换为元组并添加到可哈希类型的
seen

import itertools

points = [[0, 0], [5, 3], [0, 5], [0, 2], [1, 3], [5, 3]]
points.sort()
nList = list(points for points,_ in itertools.groupby(points))
print nList
结果:

[[0, 0], [0, 2], [0, 5], [1, 3], [5, 3]]

Python已经按字典顺序对iterable容器(元组、列表等)和字符串进行了排序

>>> points = [[0, 0], [5, 3], [0, 5], [0, 2], [1, 3], [5, 3]]
>>> sorted(points)
[[0, 0], [0, 2], [0, 5], [1, 3], [5, 3], [5, 3]]

根本没有排序键将按字典顺序对这些对进行排序:
points.sort()
@nutanepal根本没有,请参阅。我也没有得到字典排序。谢谢你的答案,删除重复。“那很有帮助。”纳坦尼帕尔说,不用担心。如果你觉得有帮助,一定要投赞成票。我试过了。但它说,当我还不到15岁的时候,我不能提高投票率。不过,我刚才还能够做到。