2011-11-23 1 views
13

скажем, у меня есть два списка:питон все возможные пары 2 элементов списка, и получить индекс этой пары

a = list(1,2,3) 
b = list(4,5,6) 

Так что я могу иметь 9 пар этих членов списка:

(1,4) 
(1,5) 
(1,6) 

(2,4) 
(2,5) 
(2,6) 

(3,4) 
(3,5) 
(3,6) 

Теперь, учитывая два члена списка, как указано выше, могу ли я узнать индекс пары? Как и (1,4) сверху, будет первая пара.

+0

Вы назвали ' list() 'неправильным образом. Было бы проще использовать '[1, 2, 3]' вместо вызова 'list()'. –

+0

Привет. Я думал, что list() одинаковый для списков, поскольку print() для печати (в python 2.x)? –

+0

Это не работает. ['list()' ожидает только один аргумент.] (http://ideone.com/576XG) –

ответ

23

И чтобы завершить ответ и остаться в примере:

import itertools 

a = [1, 2, 3] 
b = [4, 5, 6] 
c = list(itertools.product(a, b)) 

idx = c.index((1,4)) 

Но это будет с нуля индекс списка, так что 0 вместо 1.

+0

эй. Возможно ли это, не создавая список комбинаций в первую очередь? –

+0

Простое использование функции itertools дает вам простой итератор. Если вы пройдете курс, вы можете перебрать его и подождать, пока не появится нужный кортеж, считая итерации. Или вы можете просто узнать индекс первого значения в первом списке и индекс второго значения во втором списке и просто начать вычислять :) –

8

Один из способов сделать это:

  1. Найти первый элемент пары ваш ищут в первом списке:

    p = (1, 4) 
    i = a.index(p[0]) 
    
  2. Найти второй элемент пары ваш ищут во втором списке:

    j = b.index(p[1]) 
    
  3. Compute индекс в списке товаров:

    k = i * len(b) + j