Wie deklariere ich ein Array in Python ?
Ich kann in der Dokumentation keinen Verweis auf Arrays finden.
__getitem__
wären sonst nicht O (1).
Wie deklariere ich ein Array in Python ?
Ich kann in der Dokumentation keinen Verweis auf Arrays finden.
__getitem__
wären sonst nicht O (1).
Antworten:
variable = []
Nun variable
bezieht sich auf eine leere Liste * .
Dies ist natürlich eine Aufgabe, keine Erklärung. In Python gibt es keine Möglichkeit zu sagen, "diese Variable sollte niemals auf etwas anderes als eine Liste verweisen", da Python dynamisch typisiert wird.
* Der standardmäßig integrierte Python-Typ wird als Liste und nicht als Array bezeichnet. Es ist ein geordneter Container beliebiger Länge, der eine heterogene Sammlung von Objekten aufnehmen kann (ihre Typen spielen keine Rolle und können frei gemischt werden). Dies sollte nicht mit dem array
Modul verwechselt werden , das einen Typ bietet, der dem C- array
Typ näher kommt . Der Inhalt muss homogen sein (alle vom gleichen Typ), aber die Länge ist immer noch dynamisch.
variable = ["Hi", "Hello"];
?)
my_2x2_list = [[a, b], [c, d]]
. Abhängig davon, wofür Sie mehrdimensionale Arrays benötigen, können Sie auch die Verwendung in Betracht ziehen numpy
, die Array-Typen für mehrdimensionale, homogene Arrays ohne Box definiert, die gegebenenfalls viel effizienter sein können. Daher sind sie für numerische Berechnungen vorzuziehen.
Dies ist ein überraschend komplexes Thema in Python.
Arrays werden nach Klassen dargestellt list
(siehe Referenz und nicht mit Generatoren mischen ).
Schauen Sie sich Verwendungsbeispiele an:
# empty array
arr = []
# init with values (can contain mixed types)
arr = [1, "eels"]
# get item by index (can be negative to access end of array)
arr = [1, 2, 3, 4, 5, 6]
arr[0] # 1
arr[-1] # 6
# get length
length = len(arr)
# supports append and insert
arr.append(8)
arr.insert(6, 7)
Unter der Haube Python's list
ist ein Wrapper für ein echtes Array, das Verweise auf Elemente enthält. Außerdem wird das zugrunde liegende Array mit zusätzlichem Speicherplatz erstellt.
Folgen davon sind:
arr[6653]
ist das gleiche zu arr[0]
)append
Der Betrieb ist "kostenlos", während etwas mehr Platz zur Verfügung stehtinsert
Betrieb ist teuerÜberprüfen Sie diese beeindruckende Tabelle der Komplexität der Operationen .
Sehen Sie sich auch dieses Bild an, in dem ich versucht habe, die wichtigsten Unterschiede zwischen Array, Array von Referenzen und verknüpfter Liste aufzuzeigen:
[1, 2, 3, 4, 5, 6, 7, 8, 9][1:-2]
Ergebnis wird sein[2, 3, 4, 5, 6, 7]
a == b[:2]
Gibt True zurück, wenn die ersten beiden Elemente von b den Werten von Array a entsprechen
Sie deklarieren eigentlich keine Dinge, aber so erstellen Sie ein Array in Python:
from array import array
intarray = array('i')
Weitere Informationen finden Sie im Array-Modul: http://docs.python.org/library/array.html
Jetzt möchten Sie vielleicht kein Array, sondern eine Liste, aber andere haben das bereits beantwortet. :) :)
list
. Python hat einen speziellen Datentyp namens an, array
der eher einem C-Array ähnelt und wenig verwendet wird.
Ich denke, Sie möchten eine Liste mit den ersten 30 bereits gefüllten Zellen. Damit
f = []
for i in range(30):
f.append(0)
Ein Beispiel dafür, wo dies verwendet werden könnte, ist die Fibonacci-Sequenz. Siehe Problem 2 in Project Euler
f = [0] * 30
stattdessen.
Das ist wie:
my_array = [1, 'rebecca', 'allard', 15]
Verwenden Sie für Berechnungen Numpy- Arrays wie folgt :
import numpy as np
a = np.ones((3,2)) # a 2D array with 3 rows, 2 columns, filled with ones
b = np.array([1,2,3]) # a 1D array initialised using a list [1,2,3]
c = np.linspace(2,3,100) # an array with 100 points beteen (and including) 2 and 3
print(a*1.5) # all elements of a times 1.5
print(a.T+b) # b added to the transpose of a
Diese Numpy-Arrays können gespeichert und von der Festplatte geladen (sogar komprimiert) werden, und komplexe Berechnungen mit großen Mengen an Elementen sind C-ähnlich schnell.
Viel verwendet in wissenschaftlichen Umgebungen. Weitere Informationen finden Sie hier .
JohnMachins Kommentar sollte die wahre Antwort sein. Alle anderen Antworten sind meiner Meinung nach nur Problemumgehungen! Damit:
array=[0]*element_count
x=[[0] * 10] * 10
Einige Beiträge deuteten darauf hin, dass Arrays in Python durch Listen dargestellt werden. Das ist falsch. Python hat eine unabhängige Implementierung array()
im Standardbibliotheksmodul array
" array.array()
", daher ist es falsch, die beiden zu verwechseln. Listen sind Listen in Python. Gehen Sie daher vorsichtig mit der verwendeten Nomenklatur um.
list_01 = [4, 6.2, 7-2j, 'flo', 'cro']
list_01
Out[85]: [4, 6.2, (7-2j), 'flo', 'cro']
Es gibt einen sehr wichtigen Unterschied zwischen Liste und array.array()
. Während diese beiden Objekte geordnete Sequenzen sind, ist array.array () eine geordnete homogene Sequenz, während eine Liste eine inhomogene Sequenz ist.
Sie deklarieren nichts in Python. Du benutzt es einfach. Ich empfehle Ihnen, mit etwas wie http://diveintopython.net zu beginnen .
Normalerweise würde ich nur tun , a = [1,2,3]
was ist eigentlich ein , list
aber für arrays
Blick auf dieser formalen Definition
Um Lennarts Antwort zu ergänzen, kann ein Array wie folgt erstellt werden:
from array import array
float_array = array("f",values)
Dabei können Werte die Form eines Tupels, einer Liste oder eines np.array haben, jedoch kein Array:
values = [1,2,3]
values = (1,2,3)
values = np.array([1,2,3],'f')
# 'i' will work here too, but if array is 'i' then values have to be int
wrong_values = array('f',[1,2,3])
# TypeError: 'array.array' object is not callable
und die Ausgabe bleibt unverändert:
print(float_array)
print(float_array[1])
print(isinstance(float_array[1],float))
# array('f', [1.0, 2.0, 3.0])
# 2.0
# True
Die meisten Methoden für Listen funktionieren auch mit Arrays. Die häufigsten Methoden sind pop (), expand () und append ().
Den Antworten und Kommentaren nach zu urteilen, scheint die Array-Datenstruktur nicht so beliebt zu sein. Ich mag es aber genauso, wie man ein Tupel einer Liste vorziehen könnte.
Die Array-Struktur hat strengere Regeln als eine Liste oder ein np.array. Dies kann Fehler reduzieren und das Debuggen erleichtern, insbesondere wenn mit numerischen Daten gearbeitet wird.
Versuche, ein Float in ein int-Array einzufügen / anzuhängen, lösen einen TypeError aus:
values = [1,2,3]
int_array = array("i",values)
int_array.append(float(1))
# or int_array.extend([float(1)])
# TypeError: integer argument expected, got float
Das Beibehalten von Werten, die als Ganzzahlen gedacht sind (z. B. Liste von Indizes) in der Array-Form, kann daher einen "TypeError: Listenindizes müssen Ganzzahlen sein, nicht Float", da Arrays ähnlich wie np.array und Listen iteriert werden können:
int_array = array('i',[1,2,3])
data = [11,22,33,44,55]
sample = []
for i in int_array:
sample.append(data[i])
Ärgerlicherweise führt das Anhängen eines Int an ein Float-Array dazu, dass das Int zu einem Float wird, ohne eine Ausnahme auszulösen.
np.array behält den gleichen Datentyp auch für seine Einträge bei, gibt jedoch anstelle eines Fehlers seinen Datentyp an neue Einträge an (normalerweise in double oder str):
import numpy as np
numpy_int_array = np.array([1,2,3],'i')
for i in numpy_int_array:
print(type(i))
# <class 'numpy.int32'>
numpy_int_array_2 = np.append(numpy_int_array,int(1))
# still <class 'numpy.int32'>
numpy_float_array = np.append(numpy_int_array,float(1))
# <class 'numpy.float64'> for all values
numpy_str_array = np.append(numpy_int_array,"1")
# <class 'numpy.str_'> for all values
data = [11,22,33,44,55]
sample = []
for i in numpy_int_array_2:
sample.append(data[i])
# no problem here, but TypeError for the other two
Dies gilt auch während der Zuordnung. Wenn der Datentyp angegeben ist, wandelt np.array die Einträge nach Möglichkeit in diesen Datentyp um:
int_numpy_array = np.array([1,2,float(3)],'i')
# 3 becomes an int
int_numpy_array_2 = np.array([1,2,3.9],'i')
# 3.9 gets truncated to 3 (same as int(3.9))
invalid_array = np.array([1,2,"string"],'i')
# ValueError: invalid literal for int() with base 10: 'string'
# Same error as int('string')
str_numpy_array = np.array([1,2,3],'str')
print(str_numpy_array)
print([type(i) for i in str_numpy_array])
# ['1' '2' '3']
# <class 'numpy.str_'>
oder im Wesentlichen:
data = [1.2,3.4,5.6]
list_1 = np.array(data,'i').tolist()
list_2 = [int(i) for i in data]
print(list_1 == list_2)
# True
während Array einfach geben wird:
invalid_array = array([1,2,3.9],'i')
# TypeError: integer argument expected, got float
Aus diesem Grund ist es keine gute Idee, np.array für typspezifische Befehle zu verwenden. Die Array-Struktur ist hier nützlich. list behält den Datentyp der Werte bei.
Und für etwas, das ich ziemlich nervig finde: Der Datentyp wird als erstes Argument in array () angegeben, aber (normalerweise) als zweites in np.array (). : |
Auf die Beziehung zu C wird hier Bezug genommen: Python-Liste vs. Array - wann verwenden?
Viel Spaß beim Erkunden!
Hinweis: Die typisierte und ziemlich strenge Natur des Arrays tendiert eher zu C als zu Python, und Python hat von Natur aus nicht viele typspezifische Einschränkungen in seinen Funktionen. Seine Unbeliebtheit erzeugt auch ein positives Feedback in der Zusammenarbeit, und das Ersetzen beinhaltet meistens ein zusätzliches [int (x) für x in Datei]. Es ist daher durchaus sinnvoll und vernünftig, die Existenz eines Arrays zu ignorieren. Es sollte die meisten von uns in keiner Weise behindern. : D.
Python nennt sie Listen . Sie können ein Listenliteral mit eckigen Klammern und Kommas schreiben:
>>> [6,28,496,8128]
[6, 28, 496, 8128]
Ich hatte ein Array von Strings und brauchte ein Array mit der gleichen Länge von Booleschen Werten, die für True initiiert wurden. Das habe ich getan
strs = ["Hi","Bye"]
bools = [ True for s in strs ]
int count[26]={0};
Es gibt wahrscheinlich einen besseren Weg, aber diese Variante bools
von oben hat funktioniert. count=[0 for ii in range(26)]
Später habe ich sie dann geändert, count=[0]*26
was vorzuziehen scheint.
Sie können Listen erstellen und in Arrays konvertieren oder mit dem numpy-Modul ein Array erstellen. Im Folgenden finden Sie einige Beispiele, um dies zu veranschaulichen. Numpy erleichtert auch das Arbeiten mit mehrdimensionalen Arrays.
import numpy as np
a = np.array([1, 2, 3, 4])
#For custom inputs
a = np.array([int(x) for x in input().split()])
Sie können dieses Array auch mithilfe der Umformungsfunktion, die Eingaben als Abmessungen der Matrix verwendet, in eine 2X2-Matrix umformen.
mat = a.reshape(2, 2)