2017-02-07 2 views
0

Ich bin ein Python Anfänger und habe Probleme, diesen Code zu verstehen.Liste Manipulationsfehler und anhängen

my_list = [12, "cat", 3.4, "dog", 62] 
new_list = [] 

for k in range(5): 

    if k % 2: 
     m = my_list.pop(k) 
     new_list.append(m) 

print(new_list) 

Als mein Verständnis sollte das Ergebnis sein [12,62] Aber es sagt [ 'Katze', 62]

jemand es mir erklären kann? Es wird geschätzt.

Antwort

3

Nun, was die Zahlen sind in range(5)? 0, 1, 2, 3, 4, richtig?

Welche davon sind ungerade? (Das heißt, k % 2 ist nicht Null und daher "truthy") 1 und 3, oder?

Also nehmen Sie zuerst Element 1, "Katze", und entfernen Sie es aus der ursprünglichen Liste und fügen Sie es der neuen Liste hinzu. Die ursprüngliche Liste ist jetzt:

[12, 3.4, "dog", 62] 

Jetzt nehmen Sie Punkt 3, 62, und es aus der ursprünglichen Liste entfernen und sie zu der neuen Liste hinzuzufügen.

Wir haben "cat" und 62 zur neuen Liste hinzugefügt, die leer anfing. Deshalb ist die neue Liste ist

["cat", 62] 

Die ursprüngliche Liste ist:

[12, 3,4, "dog"] 
+0

Vielen Dank! Extrem hilfreich –

0

if k % 2: ist True wenn k ungerade ist.

Wenn k=0 es nicht innerhalb if

gehen, wenn k=1 es in if geht und pops-> cat

jetzt Liste ist

list [12, 3.4, "dog", 62] 

und

new_list=["cat"] 

wenn k=2 es wird nicht innerhalb if

gehen, wenn k=3 es innen geht, ob und erscheint 62

so new_list = ["cat","62"]

+0

Danke viel! –

1

Listen Null in Python indiziert sind. So my_list[0] == 12, my_list[1] == 'cat' usw.

Die Schleife for k in range(5): Schritte, so dass k die Werte bekommt 0, 1, 2, 3, 4 (das Ende ist exklusiv, so k nie 5 zu gehen.

if k % 2: bedeutet, "wann immer k modulo 2 ungleich Null ist", was äquivalent zu "wenn k ungerade ist". Der erste ungerade Wert, der k bekommt, ist 1.my_list[1] ist "cat", so dass zuerst an new_list angehängt wird.

list.pop entfernt und gibt ein Element aus der Liste zurück. Das heißt, sobald k == 1 verarbeitet wurde, ist "cat" nicht mehr in der Liste. my_list wird danach [12, 3.4, "dog", 62] sein.

Die nächste ungerade Zahl ist 3. my_list[3] ist jetzt 62. Wenn "cat" nicht entfernt worden wäre, wäre es stattdessen "dog" gewesen. my_list wird danach [12, 3.4, "dog"] sein.

Jetzt kommt der entscheidende Teil: Der letzte Wert von k ist 4. Glücklicherweise ist 4 gerade, so dass die if nicht eingegeben wird. Wenn es gewesen wäre, würde es einen Fehler geben, weil my_list nur noch 3 Elemente hat, und Sie das fünfte Element (Index 4) nicht abschalten können.

0

Nun, lassen Sie uns über den Schritt gehen Schritt:

my_list = [12, "cat", 3.4, "dog", 62] # (List of 5 Elements) 
new_list = [] # (Empty List) 
for k in range(5): # A For loop from 0 to 4 ## value of K goes from 0 to 4 

    if k % 2: # Checking whether k is odd 
       # Here k%2 return 0 (if k is even) or 1 (if K is odd) 
       # So, Here, if k % 2: condition works only on odd Numbers i.e. [1,3] 

     m = my_list.pop(k) # The method pop() removes and returns last object or obj from the list. 
     # this return and remove element on index k 
     # Here, when value of k is 1, return element 'cat' at index 1 in my_list 
     # and update the my_list ! now my_list is [12, 3.4, 'dog', 62] 
     # When value of k is 3, return element 62 on index 3 in updated list [12, 3.4, 'dog', 62] 
     # again update the my_list to [12, 3.4, 'dog'] 

     new_list.append(m) # Append the element in List 
          # First m contains 'cat' and then 62 
print(new_list) # Print the list which is ['cat',62]