bucle anidado través de la lista evitando mismo elemento

Jonathan Dyke:

No puedo explicar el concepto del todo bien, pero estoy tratando de recorrer una lista utilizando un bucle anidado, y no puedo encontrar la manera de evitarlos usando el mismo elemento.

list = [1, 2, 2, 4]
for i in list:
    for j in list:
        print(i, j) # But only if they are not the same element

Por lo que la salida debería ser:

1 2
1 2
1 4
2 1
2 2
2 4
2 1
2 2
2 4
4 1
4 2
4 2

Editar ya que las soluciones no funcionan en todos los escenarios:

La if i != jsolución sólo funciona si todos los elementos de la lista son diferentes, he elegido claramente un mal ejemplo, pero me refería mismo elemento más que el mismo número; He cambiado el ejemplo

blhsing:

Puede comparar los índices de las dos iteraciones en su lugar:

lst = [1, 2, 2, 4]
for i, a in enumerate(lst):
    for j, b in enumerate(lst):
        if i != j:
            print(a, b)

También puede considerar el uso itertools.permutationspara su propósito:

lst = [1, 2, 2, 4]
from itertools import permutations
for i, j in permutations(lst, 2):
    print(i, j)

Tanto salida sería:

1 2
1 2
1 4
2 1
2 2
2 4
2 1
2 2
2 4
4 1
4 2
4 2

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=298293&siteId=1
Recomendado
Clasificación