如果我有一个元组列表,其中每个元组代表变量a
、b
和{
冗余元组是那些a
和b
简单互换的元组,但是c
是相同的。对于这个例子:
tups = [(30, 40, 50), (40, 30, 50), (20, 48, 52), (48, 20, 52)]
我的最终列表应该只包含一半的条目。一种可能的输出:
^{pr2}$另一个
tups = [(40, 30, 50), (20, 48, 52)]
等等
有没有一种简单的Python式的方法?在
我尝试过使用集合,但是(30, 40, 50)
与(40, 30, 50)
不同,但对我来说,这些都是多余的,我只想保留其中一个(哪一个无关紧要,但如果我可以选择的话,我更喜欢从低值到高值的顺序)。如果有办法对元组的前2个元素进行排序,那么使用集合就可以了。在
我确信我可以想出一个可行的解决方案(也许把元组转换成列表作为中间步骤),但我只想看看是否有一种简单明了的方法可以做到这一点,但我并不熟悉。在
附言:这个问题的部分动机是PE #39。但即使撇开这个体育问题,我现在只是好奇,这是如何容易做到的(或如果)。在
编辑:
只是为了给那些不熟悉PE的人提供一些上下文,a
,b
,和{
从您的问题来看,元组的前两个元素似乎构成了元组中的一个子单元。因此,将数据重组为元组和第三个数字的元组似乎是有意义的,其中第一个元组是排序顺序的前两个数字。然后您可以自然地使用集合:
当然,这是假设每个元组的第三个元素始终是每个元组中最大的元素,否则,请执行以下操作:
^{pr2}$正如WolframH所建议的,表达式}可以是任何想要将排序的元素与未排序的元素分离的点。在
tuple(sorted(tup[:2])) + (tup[2],)
可以写成tuple(sorted(tup[:2])) + tup[2:]
,这是有利的,因为它可以被推广到tuple(sorted(tup[:i])) + tup[i:]
,其中{相关问题 更多 >
编程相关推荐