2016-03-20 12 views
4

Ich möchte Werte zu verschiedenen Indizes zuweisen und nicht in einer sequentiellen Weise (mit Hilfe von append), wie wir es in einer Hash-Tabelle tun würden. Wie initialisiert man das Array einer bestimmten Größe? Was ich mache:Wie deklariere ich ein Array in Python

a=[] 
for x in range(0,10000): 
     a.append(0) 

Gibt es einen besseren Weg? Gibt es auch eine Funktion wie memset() in C++?

+3

Sie können 'tun a = [0] * 10000' – styvane

+1

Wh Über das? 'a = [0 für i im Bereich (10000)]' – Valijon

+1

Das ist eine Liste. Um das zu tun, sag 'a = [0] * 10000' – zondo

Antwort

4

Wie bereits erwähnte in den Kommentaren, ein list Initialisierung (kein Array, das ist nicht der Typ in Python, obwohl es ein array Modul für speziellere Anwendung) zu einer Reihe von Nullen ist nur:

a = [0] * 10000 

Wenn Sie ein Äquivalent zu memset zu diesem Zweck wollen, sagen wir, wollen Sie die ersten 1000 Elemente eines bestehenden list auf Null, Sie slice Zuordnung verwenden würde:

a[:1000] = [0] * 1000 
1

Es ist ein Aufruf an „memset“ von CPython:

from cpython cimport array 
    import array 

    cdef array.array a = array.array('i', [1, 2, 3]) 

    # access underlying pointer: 
    print a.data.as_ints[0] 

    from libc.string cimport memset 
    memset(a.data.as_voidptr, 0, len(a) * sizeof(int)) 
+0

Es gibt keinen Hinweis darauf, dass das OP hier tatsächlich ein C-Array initialisieren möchte. Und definitiv kein Hinweis auf den Wunsch, Cython zu verwenden (was nicht dasselbe ist wie CPython; CPython bezieht sich auf den Referenzinterpreter, der zufällig in C implementiert ist). – ShadowRanger

+0

In der Post können Sie lesen "Gibt es auch eine Funktion wie memset() in C++?" Was das OP wählt, um sein Problem zu lösen, ist seine Entscheidung. Eine Antwort, nur weil sie nicht zu Ihrer Lösungsidee passt, ist aus meiner Sicht etwas eng. Aber ich werde auf eine fundierte Meinung verzichten. Wenn ich sehe, dass mein Beitrag keine nützlichen Informationen für OP liefert, lösche ich ihn. – armatita

+0

Auch wenn das OP die Antwort nicht nützlich findet, kann jemand anderes diese Frage lesen. Wenn es eine legitime Antwort ist und eine neue Perspektive auf das Problem bietet, kann es frei bleiben und muss nicht gelöscht werden. Siehe http://meta.stackoverflow.com/questions/256350/should-i-delete-my-question-if-it-got-negative-votes%3E – MANA624

2

Sie können eine Liste mit einer bestimmten Größe auf verschiedene Weise initialisieren.

Python hat Liste Comprehensions, die Listen aus anderen Listen inline erstellen. Also, wenn Sie eine Liste mit 10000 Elementen (range(10000)) machen können Sie bequem aus dieser Liste machen mit 10000 Nullen:

[0 for _ in range(10000)] 

Das ist ziemlich nah an Ihre ursprüngliche Lösung.

Wahrscheinlich ein effizienterer Ansatz ist von 10000 eine Liste mit einer einzigen Null zu multiplizieren:

[0]*10000 

Beide werden eine Liste mit 10000 Nullen ergeben.

Verwandte Themen