Para la lista k1 = [31.0, 72, 105.0, 581.5, 0, 0, 0], me gustaría agregar una constante por ejemplo 100 al primer elemento distinto de cero en la lista inversa. esto es lo que quiero: newk1 = [0, 0, 0, 681.5, 105, 72, 31] Como principiante en Python no pude resolverlo. Me podría ayudar. Ese es mi código:

k1=[31.0, 72, 105.0, 581.5, 0, 0, 0]
Inverselist=[]


for i in range(len(etack1)):
    Inverselist.append(etack1[-(i+1)])
    print("Inverselist", Inverselist)
newk1=Inverselist
run_once = 0
while run_once < 1:      
    for j in  range(len(newk1)): 
        if newk1[j-1]>0: 
            newk1[j-1]=newk1[j-1]+100 
            run_once = 1 
            break
print("Newk1", newk1 )
6
rezzz 31 oct. 2017 a las 01:47

6 respuestas

La mejor respuesta

Creo que estás pensando demasiado en esto:

Primero, invierta la lista:

inverselist = k1[::-1]

Luego, reemplace el primer elemento distinto de cero:

for i, item in enumerate(inverselist):
    if item:
        inverselist[i] += 100
        break
9
Tim Pietzcker 30 oct. 2017 a las 22:52

Puedes probar esto:

k1=[31.0, 72, 105.0, 581.5, 0, 0, 0]
new_list = []
flag = False
for i in k1[::-1]:
    if i > 0 and not flag:
        new_list.append(i+100)
        flag = True
    else:
        new_list.append(i)

Salida:

[0, 0, 0, 681.5, 105.0, 72, 31.0]
1
Ajax1234 30 oct. 2017 a las 23:07
list1 = [31.0, 72, 105.0, 581.5, 0, 0, 0]
last_idx = len(list1)-1
print(last_idx)
for i in range(len(list1)):
    list1.insert(i,list1.pop(last_idx))  
print(list1)

Salida:

[0, 0, 0, 581.5, 105.0, 72, 31.0]
-2
Shree 3 dic. 2019 a las 03:31

Si desea revertir, puede hacerlo cortando en rodajas. Como a continuación,

>>> a = [1,2,3]
>>> reverse_a = a[::-1]
>>> reverse_a
[3, 2, 1]

Una vez que revisa la lista, solo necesita verificar cuándo el primer elemento es un elemento distinto de cero

k1=[31.0, 72, 105.0, 581.5, 0, 0, 0]
newk1= k1[::-1]
for i in range(len(newk1)):
    if newk1[i] != 0:
        newk1[i] += 100
        break
print("Newk1", newk1 ) #prints Newk1 [0, 0, 0, 681.5, 205.0, 172, 131.0]
2
yash 30 oct. 2017 a las 22:56

Solo una manera tonta. Modifica la lista en lugar de crear una nueva.

k1.reverse()
k1[list(map(bool, k1)).index(1)] += 100
2
Stefan Pochmann 30 oct. 2017 a las 23:16

Aquí hay una solución usando reversed en lugar de cortar con [::-1]:

items = [31.0, 72, 105.0, 581.5, 0, 0, 0]

inverse_items = []
found_non_zero = False
for item in reversed(items):
    if not found_non_zero and item:
        found_non_zero = True
        item += 100
    inverse_items.append(item)
1
user8651755user8651755 30 oct. 2017 a las 23:19