2016-10-05 6 views
1

Ich habe eine Liste von Listen von Zeichenketten:auf eine Liste von Listen in Python Hinzufügen Zähler/Index

listBefore = [['4', '5', '1', '1'], 
       ['4', '6', '1', '1'], 
       ['4', '7', '8', '1'], 
       ['1', '2', '1', '1'], 
       ['2', '3', '1', '1'], 
       ['7', '8', '1', '1'], 
       ['7', '9', '1', '1'], 
       ['2', '4', '3', '1']] 

und ich möchte einen Zähler/Index in der Mitte jeder Liste hinzufügen, so dass die Liste sieht so aus:

listAfter = [['4', '5', '1', '1', '1'], 
      ['4', '6', '2', '1', '1'], 
      ['4', '7', '3', '8', '1'], 
      ['1', '2', '4', '1', '1'], 
      ['2', '3', '5', '1', '1'], 
      ['7', '8', '6', '1', '1'], 
      ['7', '9', '7', '1', '1'], 
      ['2', '4', '8', '3', '1']] 

Was wäre der einfachste Weg? Ich könnte wahrscheinlich die Listen überlisten und den Index hinzufügen, aber gibt es einen saubereren Weg dazu?

Cheers, Kate

Edit: Der Code, den ich Werke für mich schrieb:

item = 1 
for list in listBefore: 
    list.insert(2,str(item)) 
    item = item + 1 
print listBefore 

ich mich gefragt, ob es einen anderen Weg, um effizienter zu tun ist, oder in einem Schritt.

+1

Es sieht aus wie Sie uns einige Code für Sie schreiben wollen. Während viele Benutzer bereit sind, Code für einen in Not geratenen Coder zu produzieren, helfen sie normalerweise nur, wenn das Poster bereits versucht hat, das Problem selbst zu lösen. Eine gute Möglichkeit, diesen Aufwand zu demonstrieren, besteht darin, den Code, den Sie bisher geschrieben haben, die Beispieleingabe (falls vorhanden), die erwartete Ausgabe und die Ausgabe, die Sie tatsächlich erhalten (Ausgabe, Rückverfolgung usw.), einzubeziehen. Je mehr Details Sie angeben, desto mehr Antworten erhalten Sie wahrscheinlich. Überprüfen Sie die [FAQ] (http://stackoverflow.com/tour) und [Wie zu fragen] (http://stackoverflow.com/questions/how-to-ask). – TigerhawkT3

+0

Ich stimme zu, dass Sie versuchen sollten, selbst etwas zu schreiben und zu sehen, was funktioniert. Für etwas Hilfe, checken Sie 'enumerate' aus. – CasualDemon

Antwort

1

Sie können dieses Verständnis mit einer Liste ausführen

listAfter = [listBefore[i][:len(listBefore[i])/2] + [str(i+1)] + listBefore[i][len(listBefore[i])/2:] for i in range(len(listBefore))] 
2

Iterate über die übergeordnete Liste mit enumerate() Zähler zu erhalten (wie i im folgende Beispiel verwendet) zusammen mit Listenelement. Fügen Sie in der Unterliste die i in der Mitte der Unterliste mit der Methode list.insert(index, value) ein. Hinweis: Der Wert von Zähler, d. H. i wird von int Typ sein, so müssen Sie es vor dem Einfügen explizit in str als str(i) eingeben eingeben. Unten ist der Code Beispiel:

for i, sub_list in enumerate(my_list, 1): # Here my_list is the list mentioned in question as 'listBefore' 
    sub_list.insert(len(sub_list)/2, str(i)) 

# Value of 'my_list' 
# [['4', '5', '1', '1', '1'], 
# ['4', '6', '2', '1', '1'], 
# ['4', '7', '3', '8', '1'], 
# ['1', '2', '4', '1', '1'], 
# ['2', '3', '5', '1', '1'], 
# ['7', '8', '6', '1', '1'], 
# ['7', '9', '7', '1', '1'], 
# ['2', '4', '8', '3', '1']] 
0

sollten Sie lernen enumerate, es lässt Sie mit zwei Iteratoren über die Liste iterieren - ein (str_list in diesem Fall ) holds the current item in the list, and the other ( I`) hält in der Liste, der Index.

for i,str_list in enumerate(listBefore): 
    listBefore[i] = str_list[:len(str_list)//2] + [str(i+1)] + str_list[len(str_list)//2:] 
0
>>> data = [['4', '5', '1', '1'], 
      ['4', '6', '1', '1'], 
      ['4', '7', '8', '1'], 
      ['1', '2', '1', '1'], 
      ['2', '3', '1', '1'], 
      ['7', '8', '1', '1'], 
      ['7', '9', '1', '1'], 
      ['2', '4', '3', '1']] 
>>> print [row[:len(row)//2] + [str(i)] + row[len(row)//2:] 
      for i, row in enumerate(data, start=1)] 
[['4', '5', '1', '1', '1'], 
['4', '6', '2', '1', '1'], 
['4', '7', '3', '8', '1'], 
['1', '2', '4', '1', '1'], 
['2', '3', '5', '1', '1'], 
['7', '8', '6', '1', '1'], 
['7', '9', '7', '1', '1'], 
['2', '4', '8', '3', '1']] 
Verwandte Themen