2013-09-19 3 views
1

У меня есть список int с неуказанным номером. Я хотел бы найти разницу между двумя целыми числами в списке, которые соответствуют определенному значению.Получение отличия от всех возможных пар из списка Python

#Example of a list 
intList = [3, 6, 2, 7, 1] 

#This is what I have done so far 

diffList = [] 

i = 0 
while (i < len(intList)): 
    x = intList[i] 

    j = i +1 
    while (j < len(intList)): 
     y = intList[j] 

     diff = abs(x-y) 
     diffList.append(diff) 

     j += 1 
    i +=1 

#Find all pairs that has a difference of 2 
diff = diffList.count(2) 
print diff 

Есть ли лучший способ сделать это?

EDIT: внесены изменения в коды. Это то, что я пытался сделать. Я хочу знать, что еще я могу использовать, кроме цикла.

+0

код, который вы размещены не делает что-либо, чтобы соответствовать значениям, оно просто печатает? –

+0

@CameronSparr - пока вы правы, я часто делаю такие вещи, когда вы печатаете прототип. Обычно я в конечном итоге заменю 'print' на' yield' позже :) :) – mgilson

ответ

6

кажется, что работа для itertools.combinations

from itertools import combinations 
for a, b in combinations(intList, 2): 
    print abs(a - b) 

Можно даже превратить этот в список понимания, если вы хотите :)

[abs(a -b) for a, b in combinations(intList, 2)] 
+0

Я искал что-то подобное. Я получил часть почти прав, только я не был уверен, как я могу получить i и j = i + 1 часть права, так как они из одного списка. Я вижу, что комбинация, вероятно, справилась с этим. Благодаря! – Cryssie

4
int_list = [3, 6, 2, 7, 1] 
for x in int_list: 
    for y in int_list: 
     print abs(x - y) 
+0

Для чего это стоит, это не делает то, что делает исходный код OP. (Вы получите дубликаты с этим, где OP позаботился о том, чтобы удалить дубликаты) – mgilson

+0

@mgilson Спасибо. Я не совсем понял, что нужно OP, потому что исходный код был только для печати. –

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