Ich habe jedoch ein anderes Verhalten festgestellt, das ich nicht erklären kann, wenn ich die Slice-Zuweisung verwende, um ein Element durch mehrere Elemente zu ersetzen. Der Iterator scheint das erste neue Element zu überspringen, fährt aber ordnungsgemäß mit dem zweiten neuen Element fort.
Code: Select all
my_list = ['a', 'b', 'c', 'd', 'e']
print(f"Original list: {my_list}")
print("*" * 20)
for i, item in enumerate(my_list):
print(f"Index {i}, processing '{item}'")
if item == 'c':
print(f"--> Found 'c' at index {i}. Replacing it with ['x', 'y']")
my_list[i:i+1] = ['x', 'y'] # In-place replacement
print(f" List is now: {my_list}")
print("-" * 20)
print(f"Final list: {my_list}")
Code: Select all
Original list: ['a', 'b', 'c', 'd', 'e']
--------------------
Index 0, processing 'a'
Index 1, processing 'b'
Index 2, processing 'c'
--> Found 'c' at index 2. Replacing it with ['x', 'y']
List is now: ['a', 'b', 'x', 'y', 'd', 'e']
Index 3, processing 'y'
Index 4, processing 'd'
Index 5, processing 'e'
--------------------
Final list: ['a', 'b', 'x', 'y', 'd', 'e']
Sehen Sie sich die Ausgabe an. Nachdem die Liste zu ['a', 'b', 'x', 'y', 'd', 'e''] wird:
- Die Schleife hat „c“ bei Index 2 verarbeitet.
- Ich habe erwartet, dass das nächste zu verarbeitende Element „d“ ist (das sich jetzt bei Index 4 befindet).
- Stattdessen war der nächste Schritt der Schleife Index 3 und es wurde das Element „y“ verarbeitet.
- Die Verarbeitung des neuen Elements „x“ wurde vollständig übersprungen.
Was ist der interne Mechanismus, der dieses spezifische Verhalten „Eins, aber nicht alle überspringen“ erklärt?
Mobile version