revlex中元组的顺序列表

2024-04-20 07:54:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图生成从0到n-1的所有k元组的列表,但是我希望这个列表在revlex中排序。例如

import itertools
list(itertools.combinations(range(0, 6), 3))

按字典顺序输出这些元组:

[(0,1,2),(0,1,3),(0,1,4),(0,1,5),(0,2,3),(0,2,4),(0,2,5),(0,3,4),(0,3,5),(0,4,5),(1,2,3),(1,2,4),(1,3,5),(1,3,5),(1,4,5),(2,3,4),(2,3,5),(2,4,5)]

鉴于我希望输出按逆向词典排序:

[(0,1,2),(0,1,3),(0,2,3),(1,2,3),(0,1,4),(0,2,4),(1,2,4),(1,3,4),(2,3,4),(0,1,5),(0,2,5),(1,2,5),(0,3,5),(1,3,5),(2,3,5),(0,4,5),(1,4,5),(2,4,5),(3,4,5)]

谢谢!你知道吗


Tags: import列表字典排序顺序rangelist词典
1条回答
网友
1楼 · 发布于 2024-04-20 07:54:30

你的逆向词典排序顺序是按最后一个项目排序,然后再按最后一个项目排序,等等。一种方法是取范围,反转该范围,使用itertools从中生成所有组合,反转该组合列表中的每个项目,最后反转整个列表。列表或元组可以通过[::-1]切片来反转,因此mylist的反转是mylist[::-1]。利用这个,我们可以得到一个复杂的表达式

[i[::-1] for i in itertools.combinations(range(6)[::-1],3)][::-1]

range函数有一种获得递减序列的内置方法。如果我们用它,我们会得到

[i[::-1] for i in itertools.combinations(range(5,-1,-1),3)][::-1]

这看起来并不容易。这两个表达式中的任何一个都给出了结果

[(0, 1, 2),
 (0, 1, 3),
 (0, 2, 3),
 (1, 2, 3),
 (0, 1, 4),
 (0, 2, 4),
 (1, 2, 4),
 (0, 3, 4),
 (1, 3, 4),
 (2, 3, 4),
 (0, 1, 5),
 (0, 2, 5),
 (1, 2, 5),
 (0, 3, 5),
 (1, 3, 5),
 (2, 3, 5),
 (0, 4, 5),
 (1, 4, 5),
 (2, 4, 5),
 (3, 4, 5)]

这就是你想要的。你知道吗

有一些例程可以做到这一点,您可以使用中间变量将表达式分解为多行。两者中的任何一个都比那句话更清楚。多行可以是:

r = range(6)[::-1]
c = itertools.combinations(r, 3)
l = [i[::-1] for i in c]
rl = l[::-1]

现在变量rl保存您想要的列表。你知道吗

所有这些都在python2.7.12中进行了测试。在python3中,您可能需要在list()周围放置一个r。你知道吗

相关问题 更多 >