web-dev-qa-db-fra.com

Tableaux 2D en Python

Quelle est la meilleure façon de créer des tableaux 2D en Python?

Ce que je veux, c'est vouloir, c'est stocker des valeurs comme celle-ci:

X , Y , Z

pour pouvoir accéder à des données telles que X[2],Y[2],Z[2] ou X[n],Y[n],Z[n]n est variable . Je ne sais pas au début de la taille de n et j'aimerais donc ajouter des valeurs à la fin.

23
spring liu
>>> a = []

>>> for i in xrange(3):
...     a.append([])
...     for j in xrange(3):
...             a[i].append(i+j)
...
>>> a
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
>>>
22
Perica Zivkovic

Selon ce que vous faites, vous n’avez peut-être pas vraiment de tableau 2D.

80% du temps, vous avez une simple liste d'objets de type "lignes", qui peuvent être des séquences appropriées.

myArray = [ ('pi',3.14159,'r',2), ('e',2.71828,'theta',.5) ]

myArray[0][1] == 3.14159
myArray[1][1] == 2.71828

Le plus souvent, il s'agit d'instances d'une classe, d'un dictionnaire ou d'un ensemble ou de quelque chose de plus intéressant que ce que vous n'aviez pas dans vos langues précédentes.

myArray = [ {'pi':3.1415925,'r':2}, {'e':2.71828,'theta':.5} ]

20% du temps vous avez un dictionnaire, saisi par une paire

myArray = { (2009,'aug'):(some,Tuple,of,values), (2009,'sep'):(some,other,Tuple) }

Rarement, aurez-vous réellement besoin d'une matrice?.

Vous avez un très grand nombre de classes de collection en Python. Les chances sont bonnes que vous ayez quelque chose de plus intéressant qu'une matrice.

10
S.Lott

En Python, on utilisera habituellement lists à cette fin. Les listes peuvent être imbriquées arbitrairement, permettant ainsi la création d'un tableau 2D. Toutes les sous-listes ne doivent pas nécessairement avoir la même taille, ce qui résout votre autre problème. Regardez les exemples que j'ai liés.

9
Stephan202

Si vous voulez faire un travail sérieux avec les tableaux, vous devriez utiliser la bibliothèque numpy library . Cela vous permettra par exemple de faire l'addition de vecteurs et la multiplication de matrices. Pour les grands tableaux, cela est beaucoup plus rapide que les listes Python. 

Cependant, numpy nécessite que la taille soit prédéfinie. Bien sûr, vous pouvez également stocker des tableaux numpy dans une liste, comme par exemple:

import numpy as np
vec_list = [np.zeros((3,)) for _ in range(10)]
vec_list.append(np.array([1,2,3]))
vec_sum = vec_list[0] + vec_list[1]  # possible because we use numpy
print vec_list[10][2]  # prints 3

Mais comme vos tableaux numpy sont plutôt petits, je suppose qu’il ya des frais généraux par rapport à l’utilisation d’un tuple. Tout dépend de vos priorités.

Voir aussi cet autre question , qui est assez similaire (à part la taille variable).

7
nikow

Je suggérerais que vous utilisiez un dictionnaire comme celui-ci:

arr = {}

arr[1] = (1, 2, 4)
arr[18] = (3, 4, 5)

print(arr[1])
>>> (1, 2, 4)

Si vous n'êtes pas sûr qu'une entrée est définie dans le dictionnaire, vous aurez besoin d'un mécanisme de validation pour appeler "arr [x]", par exemple. essayez-sauf.

5
Roee Adler

Si vous êtes préoccupé par l’empreinte mémoire, la bibliothèque standard Python contient le module array ; ces tableaux contiennent des éléments du même type.

3
Eric O Lebigot

Veuillez considérer les codes suivants:

from numpy import zeros
scores = zeros((len(chain1),len(chain2)), float)
0
C-Zeous
x=list()
def enter(n):
    y=list()
    for i in  range(0,n):
        y.append(int(input("Enter ")))
    return y
for i in range(0,2):
    x.insert(i,enter(2))
print (x)

ici, j'ai créé un tableau 1D et inséré dans un autre tableau en tant que membre du tableau plusieurs tableaux 1-d à l'intérieur d'un tableau, car les valeurs de n et i changent

0
Shah_jahan