我对this one提出了类似的问题,但我的元组包含列表,如下所示:
mytuple = (
["tomato", 3],
["say", 2],
["say", 5],
["I", 4],
["you", 1],
["tomato", 6],
)
最有效的排序方式是什么?
答案 0 :(得分: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])
答案 1 :(得分:5)
你无法对元组进行排序。
你可以做的是使用sorted(),它不会对元组进行排序,但会从你的元组创建一个排序列表。如果你真的需要一个排序元组,那么你可以将sort作为一个元组转换为:
mytuple = tuple(sorted(mytuple, key=lambda row: row[1]))
这可能会浪费内存,因为您正在创建一个列表然后丢弃它(并且还丢弃原始元组)。你有可能不需要元组。更有效的方法是从列表开始并对其进行排序。
答案 2 :(得分:1)
不幸的是,你必须实例化一个新的元组:类似
mytuple = sorted(mytuple)
应该做的伎俩。但是,sorted
不会返回元组。如果您需要,请将呼叫包裹在tuple()
中。如果数据集很长,这可能会很昂贵。
如果您需要设置子列表中的第二个元素,则可以使用key
参数加sorted
函数。你需要一个帮助函数:
mytuple = sorted(mytuple, key=lambda row: row[1])
答案 3 :(得分:1)
在该问题的可接受答案(sorted(..., key=itemgetter(...))
)中使用的技术应该适用于任何此类迭代。根据您在此处提供的数据,我认为那里提供的确切解决方案是您想要的。