在O(n)的列表中生成唯一的非重复对

时间:2016-07-17 07:39:22

标签: list python-3.x combinations

我们如何生成唯一的非重复对,使得不重复(x,y)=(y,x)。

假设我们有一个列表[3,6,9]。然后,答案是(3, 6) (3, 9) (6, 9) 如果列表是[3,6]。然后回答是(3,6)

这可以使用2 for循环来完成,但我们希望最好在O(n)中完成(使用最多一个循环)

有这样做的pythonic方法吗?

1 个答案:

答案 0 :(得分:0)

Pythonic的方法是使用标准库生成器(https://docs.python.org/2.7/library/itertools.html#itertools.combinations):

from itertools import combinations

for comb in combinations([3,6,9], 2):
    print(comb)

正如文档所说,组合的数量是n! / (2 * (n-2)!),我猜是O(n^2)。所以它不能在O(n)时间内完成。