2016-12-13 4 views
-1

я нашел fonction, но я не хочуItertools продукт списка

A = [[1,2],[3,4]] 
print list(product(*A)) 
[(1, 3), (1, 4), (2, 3), (2, 4)] 

Я хотел бы иметь только что ниже в ответ

[(1, 4),(2, 3)] 

Как я могу сделать это, пожалуйста?

Фактически, я не хочу иметь номер в том же месте в первоначальном списке в моем конечном списке.

Я сделал, что:

def afficherListe(A): 
n=len(A) 
B=[] 
for i in range (0,n,1): 
    for j in range (0,n,1): 
     if i!=j: 
      B.append(A[i][j]) 
return B 

Но это не работает, я только что [2,3] в ответ ...

+0

В конце концов, для этого Exemple, я хочучтобы иметь [(1,4), (2,3)], но с моей функцией «AfficherListe» у меня есть только (2,3), и я не знаю, где я совершил ошибку в своей функции ... –

+0

' (2,3) '- единственная пара, которая соответствует вашему заявленному условию. Вместо этого вам нужны все пары '(x, y)', где позиция 'x' в исходном списке отличается от позиции' y' в исходном списке, а не всех пар, где оба 'x',' y' отличаются от их первоначальных позиций. –

+0

Вам нужно уточнить, что именно вы пытаетесь сделать. Например, какой должен быть выход, если 'A = [[1,2,3], [4,5,6], [7,8,9]]'? –

ответ

1

Я думаю, что, возможно, вы хотите, чтобы получить все кортежи, состоящие из 1 пункта из каждого столбца и каждой строки, как в определении детерминанта. Если это так:

from itertools import permutations 

def afficherListe(A): 
    """A is a square matrix. Returns all tuples used in det(A)""" 
    n = len(A) 
    return [tuple(A[i][j] for i,j in enumerate(p)) for p in permutations(range(n))] 

#tests: 
A = [[1,2],[3,4]] 
B = [[1,2,3],[4,5,6],[7,8,9]] 
print(afficherListe(A)) 
print(afficherListe(B)) 

Выход:

[(1, 4), (2, 3)] 
[(1, 5, 9), (1, 6, 8), (2, 4, 9), (2, 6, 7), (3, 4, 8), (3, 5, 7)] 
1
[(a,b) for a in A[0] for b in A[1] if A[0].index(a)!=A[1].index(b)] 

Вход:

A = [[1, 2], [3, 4]] 

вне положенное:

[(1, 4), (2, 3)] 

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

  • Нет связанных вопросов^_^