2017-04-21 2 views
0

ich ein Nullelement nach jeweils 7 Elementen in der Liste eingefügt werden soll:Einsatz null nach jedem siebten Elemente in der Liste

ich folgende versucht, aber es nicht einfügen ‚‘ am Ende (nach dem 7.en Elemente) :

mapline = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n'] 
i = 7 
while i < len(mapline): 
    mapline.insert(i, '') 
    i += 8 

>>> mapline 
['a', 'b', 'c', 'd', 'e', 'f', 'g', '', 'h', 'i', 'j', 'k', 'l', 'm', 'n'] 

>>> len(mapline) 
15 

ich anfügen hatte '' am Ende: das

>>> mapline.append('') 
>>> mapline 
['a', 'b', 'c', 'd', 'e', 'f', 'g', '', 'h', 'i', 'j', 'k', 'l', 'm', 'n', ''] 

gibt es eine Alternative zu lösen?

+1

Warum ist 'i + = 8', wenn Sie jede' 7' machen wollen? Liegt es daran, dass die erste Einfügung die Liste vergrößert? Was wäre, wenn die Liste länger wäre? Oder sind das realistische Daten? –

+1

Ich würde vorschlagen, diesen Ansatz mit "einfügen" zu verwenden, wird es ineffizient sein. –

Antwort

3

Ein einzelner Fehler. Ändern Sie einfach den Zustand zu <=, wenn Sie das letzte Element zu „zählen“ wollen:

while i <= len(mapline): 
1

Dies tun sollte es

mapline = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n'] 

newline = [] 

for i, line in enumerate(mapline): 
    if (i + 1) % 7 == 0: 
     newline.append('') 
    newline.append(i) 
+0

Sie können einfach 'enumerate (seq, 1)' verwenden, um mit dem Zählen von '1' zu beginnen. –

+0

Vielen Dank für die Vorschläge! –

+0

Dieser Ansatz skaliert viel besser als "Einfügen", obwohl es eine neue Liste erstellt. Aber ich würde mit so etwas gehen ... +1 –

0

die Schleife hat noch einmal laufen, um das Null-Element hinzufügen

while i < len(mapline) + 1 : 
Verwandte Themen