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
,这表示该元素已被添加
此外,由于typelist
不是可散列类型,因此不能将它们直接添加到集合中。在上面的代码中,列表被转换为元组并添加到可哈希类型的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岁的时候,我不能提高投票率。不过,我刚才还能够做到。