2017-03-17 7 views
0

Ich bin die Schaffung einer mehrdimensionale Liste wo Reihen und Spalten berücksichtigt werden. Der Code würde erfordern, dass der Benutzer n Anzahl der Ziffern in Abhängigkeit von count eingeben.Mehrdimensionale Liste

Beispiel: Der Benutzer erforderlich ist zur Eingabe von Zahlen 5mal und dann wird die Zahl als Liste der Liste angezeigt.

UserInput: 1 2 3 
      4 5 6 
      5.5 1 2 
Output: [[1,2,3],[4,5,6],[5.5,1,2]] 

Ich bin in der Lage eindimensionale Liste zu tun, aber wenn es um die multidimensionale Liste geht Ich bin in ihm verloren. Hier ist mein Code, den ich bis jetzt ausgearbeitet habe:

rows = 5 
table = rows*[0] 
rowNumber = 0 

while rowNumber < rows: 
    userInput = input("Enter a number:").split() 

    for i in range(len(userInput)): 
     for j in range(len(userInput[i]): 
       table[i][j] = userInput 

rowNumber +=1 
print(table) 

Jede Hilfe wird sehr geschätzt. :)

Antwort

0

Riecht wie Hausaufgaben :)

Sie müssen eine Liste von Listen erstellen. Im Moment ist Ihre Tabelle nur eine eindimensionale Liste mit 0s. Sie möchten eine Liste in der äußeren Schleife erstellen und in den inneren hinzufügen. Wenn die innere Schleife abgeschlossen ist, fügen Sie diese neu erstellte Liste der Hauptliste hinzu.

0

Der Schlüssel hier ist, dass userInput = Eingabe ("Geben Sie eine Nummer ein:"). Split() gibt Ihnen eine Liste zurück. Sie können diese Liste einfach direkt in der Tabelle verwenden, ohne sie analysieren zu müssen!

Eine 'Zeile' der Tabelle wird dann userInput als Wert haben. Halten Sie auch die falsche Aufstellung im Auge Sie nowNumber haben + = 1

while rowNumber < rows: 
    userInput = input("Enter a number:").split() 

    table[rowNumber] = userInput 

    rowNumber +=1 
0

Es ist nicht ganz einfach zu bekommen Strings von 5,5, 1, 2 drehen in ein float, int und int, aber diese wird es getan :

rows = 5 
table = [] 

print('Enter a number:') 
while len(table) < rows: 
    userInput = input().split() 
    table.append([int(x) if int(float(x))==float(x) else float(x) for x in userInput ]) 

print(table) 

Wenn ich zu viel in die Details las und so etwas wie das ist ok:

[[1.1, 2.0, 3.0], [2.0, 3.0, 4.0], [3.0, 4.0, 5.0], [4.0, 5.0, 6.0], [5.0, 6.0, 7.0]] 

dann dieser Code ein wenig einfacher ist:

rows = 5 
table = [] 

print('Enter a number:') 
while len(table) < rows: 
    userInput = input().split() 
    table.append(list(map(float, userInput))) 

print(table) 
0

Da dies wie eine Aufgabenfrage ist, werde ich diese Diskussion auf höherer Ebene halten.

Eine mehrdimensionale Liste ist eine Liste von Listen (von Listen ..., so tief wie nötig). Traditionell würde dies durch eine geschachtelte Schleifenstruktur erzeugt werden.

Mit List Comprehensions ist es ziemlich einfach, eine zweidimensionale Liste zu erstellen, obwohl mehrdimensionale Listen höherer Ordnung beginnen können ziemlich lächerlich aussehen und kann schwierig zu lesen ([ [ [ [ x ] for x in source_0 ] for y in source_1 ] for z in source_3 ], um eine vierdimensionale Liste erstellen).

Es sollte beachtet werden, dass die Konstrukte zum Erstellen einer mehrdimensionalen Liste mit fester Tiefe offensichtlicher sind als eine mehrdimensionale Liste mit variabler Tiefe.

Angenommen, Sie müssten die Anzahl der Dimensionen der mehrdimensionalen Liste eingeben.Es gibt ein paar verschiedene Möglichkeiten, dieses Problem zu lösen, aber mein Favorit verwendet eine Schleife und einen Stapel; Die Schleife überwacht die Länge des Stapels und fügt dem obersten Element im Stapel eine zusätzliche Liste hinzu und verschiebt dann die neue Liste auf den Stapel. Zum Beispiel:

def create_multidimensional_list(depth): 
     result = [] 
     stack = [ result ] 
     while len(stack) < depth: 
      new_list = [] 
      stack[ -1 ].append(new_list) 
      stack.append(new_list) 
     return result 

Es gibt einen weiteren Aspekt mehrdimensionaler Listen zu nennen: Wenn sie rechteckig oder gezackt sind. In einer rechteckigen mehrdimensionalen Liste haben alle Geschwister eines Listenelements die gleiche Tiefe, während eine gezackte mehrdimensionale Liste (manchmal auch als dünn besetzte mehrdimensionale Liste bezeichnet) Listenelemente haben kann, deren Geschwister unterschiedliche Tiefen haben. Der obige Code zum Erstellen einer mehrdimensionalen Liste erstellt eine rechteckige mehrdimensionale Liste. Der Code zum Behandeln einer rechteckigen mehrdimensionalen Liste ist einfacher zu schreiben (besonders wenn Sie die Tiefe vorher kennen), aber gezackte mehrdimensionale Listen können weniger Speicher benötigen, da Sie die Liste nicht unbedingt zu ihrer rechteckigen Kapazität auffüllen müssen.