按字典序对一组集合进行排序

3
在Python中 - 我有一个集合列表,例如
members = [set(1,2,3), set(2,4,1), set(1,3,2), set(2,1,3)]

我希望您可以按索引字典序对它们进行排序,如果可能的话,不需要将其转换为元组。如果它们是元组,我可以简单地使用以下代码:
members.sort()

由于没有办法直接通过索引访问集合,例如使用iter(members[0]).next(),因此我无法使用sort(key=)语法。也许我错过了一些简单的东西,可以使该语法适用?

如果可能的话,我的目标是避免将set转换为tuple再转换回set

编辑:考虑到集合的顺序不固定,我认为这是一个无意义的问题。下面的大多数答案都涉及对集合中项目的排序。那么对列表中的集合进行排序呢?我提出这个问题,知道排序只是一种潜在的实现方式,因为集合内部的顺序不能保证。


1
集合没有任何顺序,因此即使iter(members[0]).next()也没有意义,因为它可以返回任何内容。 - Ashwini Chaudhary
@AshwiniChaudhary 我想澄清一下你所说的返回“anything”的含义。也就是说,根据集合的定义,iter(set(1,2,3)).next()不能保证返回1,但根据集合的实现方式还是有很大可能性返回1。 - Cruncher
3个回答

3

你的请求并没有太多意义,按字典顺序排序需要定义一个顺序(按第一个元素排序,如果第一个元素相等,则比较第二个元素以此类推),但是set元素是无序的。

然而,你可以定义自己的比较函数,但你试图做什么并不清楚(set中没有“第一个”元素)。


我之前没有意识到集合是无序的。谢谢。 - Jzl5325

2
>>> members = [set([1,2,3]), set([2,4,1]), set([1,3,2]), set([2,1,3])]
>>> members.sort(key=sorted)
>>> members
0: [set([1, 2, 3]), set([1, 2, 3]), set([1, 2, 3]), set([1, 2, 4])]

0
成员=[{1, 2, 4},{1, 2, 3}, {1, 2, 3},{1, 2, 3},{1, 2}] 成员.sort(key=lambda a:",".join(map(str,sorted(a)))) 成员 [{1, 2}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 4}]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接