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 != j
solució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.permutations
para 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