2013-04-06 4 views
0

Что было бы питон эквивалент реализации для этого C++ код:Вычислить все уникальные перестановки с помощью вложенных циклов в Python

char x[10]; 
for (int i=0; i < 10; i++) { 
    for (int j=i; j < 10; j++) { 
     calc_something(x[i], x[j]) 
    } 
} 

Спасибо

+0

[Что вы пробовали?] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) – Volatility

+0

Два в то время как петли, EAC h с счетчиком, используемым как индекс в списке ... но я бы предпочел использовать native для X в структуре List – d1337

ответ

2

Вот некоторые решения, которые не используют импорт, и предполагая, что x уже объявлен как список, содержащий 10 элементов:

for i in range(10): # xrange in Python 2 
    for j in range(i, 10): 
     calc_something(x[i], x[j]) 

Или с помощью enumerate функции:

for i, el in enumerate(x): 
    for j in x[i:]: 
     calc_something(el, j) 
0

Простейшим будет:

for i in range(1,10): 
     for j in range(1,10): 
      calc_something(list[i],list[j]) 

вместо жесткое кодирование (1,10) вы можете сказать
для i в списке: для ji п список:

+0

Но это запустит calc для 8,1 и 1,8, чего я пытаюсь избежать ... «calc_something» является симметричным – d1337

+0

, если вы хотите уникальные комбинации: 'i_vals = [] для i в диапазоне (1,10): i_vals.append (i) для j в диапазоне (1,10): if not j in i_vals: calc_something (list [i], list [j]) ' –

0
x=[] 

for i in range(1,10): 
    for j in range(1,10): 
     calc_something(x[i],x[j]) 
4

Это делается просто с itertools.combinations():

import itertools 

... 

for i, j in itertools.combinations(x, 2): 
    calc_something(i, j) 

Это дает то, что вы хотите. В частности, он будет возвращать элементы в следующем порядке:

[(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)] 
+0

+1 Где мы будем без' itertools'! – Volatility

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