Python Nested Loop unique pairs

浪尽此生 提交于 2019-12-23 03:59:50

问题


I'm trying to write a nested loop that prints out all possible "unique pairs" of numbers from a certain range. For example, if the range was from 1 to 3 the unique pairs would be:

(1,2) (1,3) (2,3)

If the range was from 1 to 4 the unique pairs would be:

(1,2) (1,3) (1,4) (2,3) (2,4) (3,4)

Here's how I did it for 1 to 3:

for i in range(1,4):
    for j in range(2,4):
        if (i != j & j != (i-1)):
            print (i,j)

which prints out (1, 2), (1, 3),(2, 3). But this is a hack because it doesn't work when I change the range to 1,5. It prints out duplicate pairs such as (1,5) and (5,1).


回答1:


Use itertools.combinations():

>>> import itertools
>>> print list(itertools.combinations(range(1, 5), r=2))
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

As long as your inputs are unique, there will be no repeated combinations:

itertools.combinations(iterable, r)

Return r length subsequences of elements from the input iterable.

Combinations are emitted in lexicographic sort order. So, if the input iterable is sorted, the combination tuples will be produced in sorted order.

Elements are treated as unique based on their position, not on their value. So if the input elements are unique, there will be no repeat values in each combination.




回答2:


for i in range(1,4):
    for j in range(i+1,4):  # <-- the key is to make j start at i+1
        print (i,j)



回答3:


You are probably looking for something like this:

n = 4
x = [(i,j) for i in range(1,n+1) for j in range(i+1, n+1)]
print x

Cheers, Alex




回答4:


You can use itertools.combinations:

>>> from itertools import combinations
>>> print list(combinations(range(1,4), 2))
[(1, 2), (1, 3), (2, 3)]

Python 2 Documentation

Python 3 Documentation




回答5:


See itertools module.

Maybe what you want is

list(itertools.combinations(range(1,4),2)) == [(1, 2), (1, 3), (2, 3)]


来源:https://stackoverflow.com/questions/29324025/python-nested-loop-unique-pairs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!