Como se ha dicho pjz, puede utilizar las funciones, por lo que aquí se puede utilizar un cierre para realizar un seguimiento del valor del contador:
# defines a closure to enclose the sum variable
def make_counter(init_value=0):
sum = [init_value]
def inc(x=0):
sum[0] += x
return sum[0]
return inc
A continuación, se hace lo que quiere con lista1:
list1 = range(5) # list1 = [0, 1, 2, 3, 4]
Y ahora con sólo dos líneas, obtenemos: lista2
counter = make_counter(10) # counter with initial value of 10
list2 = reduce(operator.add, ([counter(x), x] for x in list1))
Al final, lista2 contiene:
[10, 0, 11, 1, 13, 2, 16, 3, 20, 4]
que es lo que quería, y se puede obtener el valor del contador después del bucle con una llamada:
counter() # value is 20
Por último, se puede reemplazar el cierre por cualquier tipo de operación que desee, aquí tenemos un incremento, pero depende de usted. Nótese también que utilizamos un reducen a aplanar lista2, y este pequeño truco requiere importar operador antes de llamar a la línea con el de reducir:
import operator
¿Qué hay de malo en lo común para la declaración? ¿Por qué molestarse con esto cuando tiene una declaración perfectamente buena? ¿Qué estás intentando lograr? –
Nada, solo quiero ver si es posible con comprennsions de listas en Python. –