2017-10-30 2 views
3

Für die Liste k1 = [31,0, 72, 105,0, 581,5, 0, 0, 0], würde Ich mag eine Konstante hinzuzufügen, zum Beispiel 100 zu dem ersten Nicht-Null-Elemente in der umgekehrten Liste . das ist, was ich will: newk1 = [0, 0, 0, 681,5, 105, 72, 31] Als Anfänger in Python kann ich es nicht herausgefunden. Kannst du mir bitte Helfen. Das ist mein Code:umge Index in einer Liste

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) 
+2

'reversed' ist eine nützliche integrierte Funktion dafür. Es ist einfacher, eine Liste mit der aktuellen Methode umzukehren. – Evert

+0

Warum 'j-1'? 'j' läuft bereits von 0 bis' len (newk1) -1', Sie brauchen also kein 'j-1' zum Indexieren. – Evert

+0

Sobald Sie Ihr Problem gelöst haben, können Sie Ihren Code unter https://codereview.stackexchange.com/ veröffentlichen; Es gibt viele zusätzliche Dinge, die verbessert werden können. – Evert

Antwort

6

Ich glaube, du Grübeln diese:

Zuerst kehren die Liste :

inverselist = k1[::-1] 
Dann

, ersetzen Sie das erste Nicht-Null-Element:

for i, item in enumerate(inverselist): 
    if item: 
     inverselist[i] += 100 
     break 
+2

@rezi Beachten Sie, wie diese Antwort zuerst ** die Schritte in Worten ** beschreibt. Dann, nachdem Sie eine klare Vorstellung von jedem Schritt haben, werden die Wörter in Python übersetzt. Dieser erste Schritt wird oft von Programmierern übersprungen und ist das wichtigste **. Ich kann das nicht genug betonen. Der wichtigste Schritt bei der Programmierung besteht darin, das Problem zu verstehen und eine Lösung ** in Worten ** zu beschreiben. –

1

Sie können dies versuchen:

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) 

Ausgang:

[0, 0, 0, 681.5, 105.0, 72, 31.0] 
+0

Dies schafft auch zwei Kopien der ursprünglichen Liste. Nicht, dass es für einen so kleinen Datensatz sehr wichtig wäre, aber Sie könnten stattdessen "umgekehrt" (k1) verwenden. –

+0

@StefanPochmann Ich habe eine allgemeinere Lösung hinzugefügt. Bitte sehen Sie meine letzte Änderung. – Ajax1234

2

Wenn Sie stornieren möchten, können Sie tun Sie es einfach durch Schneiden. Wie weiter unten,

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

Sobald Sie durch die Liste zu gehen, müssen Sie nur überprüfen, wenn das erste Element ein Nicht-Null-Element ist

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

Nur eine dumme Art und Weise. Ändert die Liste, anstatt eine neue zu erstellen.

k1.reverse() 
k1[list(map(bool, k1)).index(1)] += 100 
1

Hier ist eine Lösung mit reversed statt mit [::-1] des Schneidens:

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) 
Verwandte Themen