对包含列表的元组进行排序
我有一个和这个问题类似的问题,不过我的元组里面是列表,内容如下:
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])