Ich versuche, in meinem Python-Skript eine sehr einfache Überprüfung durchzuführen, bei der ich 6000 Spalten, aber nur 3 Datenzeilen in mehreren Arrays habe.

Um einen Überblick über die Funktionsweise meines Skripts zu erhalten, möchte ich an bestimmten Stellen im Skript einige Überprüfungen hinzufügen, die einige Spalten meiner Arrays in mein Linux-Terminalfenster drucken, und sie mit Handberechnungen vergleichen, um sicherzustellen, dass ich keine mache ein Fehler überall.

Wenn ich drucke: print(NH3flux[0][0]) oder print(NH3flux[1][0]), erhalte ich die richtigen Daten.

Wenn ich ein print(NH3flux[0][:]) mache, bekomme ich meine gesamte erste Zeile (oder Spalte, wenn Sie es vorziehen)

Das Problem: Wenn ich ein print(NH3flux[:][0]) mache, erhalte ich genau das gleiche Ergebnis wie print(NH3flux[0][:]), was mich verwirrt, als ich dachte, ich hätte Arrays in Python verstanden?

Wenn ich mein : durch die Nummern 0, 1 oder 2 ersetze, erhalte ich die richtigen Daten und 3 stürzt die Ausführung ab und aus irgendeinem Grund {{X5} } Zeichen funktioniert nicht.

Was verstehe ich nicht?

Bearbeiten: Bitte beachten Sie, dass die Zahlen möglicherweise in Zeichenfolgenform vorliegen, da sie aus einer Datenbank gelesen werden und daher noch nicht konvertiert wurden. Welches Format das Objekt hat, ist hier hoffentlich nicht das Problem.

print(NH3flux[0][0]) returns 0.00000

print(NH3flux[1][0]) returns 0.00001

print(NH3flux[2][0]) returns 0.00013

print(NH3flux[3][0]) returns list index out of range as expected

print(NH3flux[0][:]) returns '0.00000', '0.00000', '0.00003', '0.00002'

, ... etc

2
vpJohan 21 Aug. 2015 im 12:21

4 Antworten

Beste Antwort

thing[:] gibt eine Kopie von thing * zurück.

NH3flux[:][0] gibt Ihnen das gleiche Objekt wie NH3flux[0] und NH3flux[0][:] gibt Ihnen eine Kopie von NH3flux[0].

Der Grund, warum NH3flux[:][0] genauso aussieht wie NH3flux[0][:], ist, dass ein Objekt genauso aussieht wie seine Kopie, wenn Sie es print *.

* Normalerweise; für list und tuple und die meisten anderen Dinge, die der Konvention folgen möchten.

4
Cyphase 21 Aug. 2015 im 09:36
NH3flux[:]

Wählt alle Spalten aus (vorausgesetzt, Ihre Matrix ist eine Liste von Listen); NH3flux[:][0] die erste davon - deine erste Reihe.

1
hiro protagonist 21 Aug. 2015 im 09:27

Ich bin mir nicht sicher, welche Daten Sie verwenden, daher kann ich nur davon ausgehen. Aber sagen Sie, Sie hätten so etwas wie:
val = [1,2], print (val [:])
Das würde Ihnen alles in dieser Liste geben, wenn Sie jetzt print (val [:] [ 1]) das würde dir nur die Nummer 2 geben, weil das erste [:] dir alles gibt, dann gibt dir [1] das zweite Element in der Liste.
Wenn Sie eine Liste wie val = [1,2, [3,4]]
erstellt haben, erhalten Sie einen Ausdruck (val [2] [:]), der Ihnen 3,4 ergibt. Es hört sich so an, als würden Sie versuchen, etwas außerhalb des Bereichs Ihres Datentyps zu drucken, ohne jedoch zu wissen, welche Daten Sie per say analysieren möchten.

0
GenericUser 21 Aug. 2015 im 09:35

print(NH3flux[0][:]) wählt das erste Unterelement / die erste Zeile aus und erstellt eine flache Kopie. print(NH3flux[:][0]) erstellt eine flache Kopie der gesamten Liste und wählt die erste Zeile aus der Liste aus, sodass Sie immer auf das erste Unterelement / die erste Zeile in der Liste zugreifen aufführen.

In [7]: l = [[1,2],[2,3]]
In [8]: l[0] # first element
Out[8]: [1, 2]  
In [9]: l[:] # whole list
Out[9]: [[1, 2], [2, 3]]
In [10]: l[0][:] # copy of first row
Out[10]: [1, 2]    
In [11]: l[:][0] # shallow copy of whole list and getting first row
Out[11]: [1, 2]
0
Padraic Cunningham 21 Aug. 2015 im 09:39