Al iterar a través de una lista, quiero hacer un seguimiento del elemento actual y luego aplicar una función a los elementos restantes.

Por ejemplo, la primera iteración imprimirá rojo y la aplicación_función se llamará pasar azul, verde y negro .

La segunda iteración imprimirá azul y apply_function se llamará pasar rojo, verde y negro .

colors = ['red', 'blue', 'green', 'black']

for color in colors:
    print color
        ### iterate through everything EXCEPT the current color
        apply_function(other_colors)
0
Kelly Roper 12 ene. 2017 a las 06:46

3 respuestas

La mejor respuesta

Un método para hacer esto es:

colors = ['red', 'blue', 'green', 'black']

for i, color in enumerate(colors):
    print color
    ### iterate through everything EXCEPT the current color
    apply_function(colors[:i] + colors[i+1:])

Esto solo excluirá el índice actual y funcionará si tiene entradas duplicadas.

1
Andrew Guy 12 ene. 2017 a las 03:51

Iterar sobre los índices; Hacer una copia; pop un elemento de la copia.

>>> indices = range(len(colors))
>>> apply_f = print
>>> for i in indices:
    c = colors[:]
    apply_f(c.pop(i), c)


red ['blue', 'green', 'black']
blue ['red', 'green', 'black']
green ['red', 'blue', 'black']
black ['red', 'blue', 'green']
>>> 
0
wwii 12 ene. 2017 a las 04:07

Puedes lograrlo:

colors = ['red', 'blue', 'green', 'black']

for index,color in enumerate(colors):
    print (color)
    apply_function(colors[:index] + colors[index+1:])
0
Sourabh Saini 12 ene. 2017 a las 04:07