2015-11-13 3 views
4

Я пытаюсь создать набор пара из списка в Python --- Я придумал, как сделать это, используя для петель:Генерация пара из списка питона

keys = range(10) 
keypairs = list() 
for i in range(len(keys)): 
     for j in range(i+1, len(keys)): 
      keypairs = keypairs + [(keys[i], keys[j])] 

есть более «питон стиль "этого? Мой метод не кажется очень элегантно ...

+2

@PaoloMoretti Это не соответствует желаемому результату OP. Запустите его код. –

+0

Ваш выход действительно то, что вы хотите - это отличается от сформулированного вопроса? – gkusner

ответ

1

Вы хотите проверить список понимание:

sorted([(i, j) for j in range(10) for i in range(10) if j > i]) 
+0

Это не то же самое, что и выпускники опросов – gkusner

1

Я хотел бы использовать itertools для этого. Проверьте combinations_with_replacement и combinations методов.

А вот пример кода:

import itertools 
list(itertools.combinations(keys, 2)) 

Редакция: Да, я заметил, что она должна быть combinations, не combinations_with_replacements.

+1

Это, вероятно, самый правильный ответ –

2

Вы хотите две петли диапазона, один от 0 до п и внутреннего от каждого I первого диапазона + 1 до п, используя список Комп:

n = 10 
pairs = [(i, j) for i in range(n) for j in range(i+1, n)] 
from pprint import pprint as pp 
pp(pairs,compact=True) 


[(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (1, 2), 
(1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 3), (2, 4), (2, 5), 
(2, 6), (2, 7), (2, 8), (2, 9), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), 
(4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 6), (5, 7), (5, 8), (5, 9), (6, 7), 
(6, 8), (6, 9), (7, 8), (7, 9), (8, 9)] 

Который точно соответствует вашему выходу.

Смежные вопросы