对包含列表的元组进行排序

0 投票
4 回答
3506 浏览
提问于 2025-04-15 11:52

我有一个和这个问题类似的问题,不过我的元组里面是列表,内容如下:

mytuple = (
 ["tomato", 3],
 ["say", 2],
 ["say", 5],
 ["I", 4],
 ["you", 1],
 ["tomato", 6],
)

有什么最有效的方法来对这个进行排序吗?

4 个回答

1

你需要创建一个新的元组,遗憾的是,得这样做:

mytuple = sorted(mytuple)

这样就可以了。不过,sorted 函数不会返回一个元组。如果你需要元组的话,可以把这个调用放在 tuple() 里。不过,如果数据集很长,这样做可能会比较耗费资源。

如果你想根据子列表中的第二个元素进行排序,可以使用 sorted 函数的 key 参数。为此,你需要一个辅助函数:

mytuple = sorted(mytuple, key=lambda row: row[1])
5

你不能直接对一个元组进行排序。

你可以使用 sorted() 这个函数,它不会对元组进行排序,而是会根据你的元组创建一个排序后的列表。如果你真的需要一个排序后的元组,你可以把 sorted 函数的返回结果转换成元组:

mytuple = tuple(sorted(mytuple, key=lambda row: row[1]))

这样做可能会浪费内存,因为你先创建了一个列表,然后又把它丢掉(同时也丢掉了原来的元组)。其实你很可能不需要元组。更有效的做法是从一个列表开始,然后对这个列表进行排序。

7

你可以很简单地得到一个排序好的元组:

>>> sorted(mytuple)
[['I', 4], ['say', 2], ['say', 5], ['tomato', 3], ['tomato', 6], ['you', 1]]

这个排序是根据列表里的项目来进行的。如果前两个项目相同,就会比较第三个,以此类推。

如果你有不同的排序标准,可以提供一个比较函数来实现。

更新:正如评论者所提到的,这个方法返回的是一个列表。你可以这样得到另一个元组:

>>> tuple(sorted(mytuple))
(['I', 4], ['say', 2], ['say', 5], ['tomato', 3], ['tomato', 6], ['you', 1])

撰写回答