En Python, c'est grand comment obtenir une liste? J'ai besoin d'une liste d'environ 12000 éléments. Vais-je encore être en mesure d'exécuter la liste des méthodes telles que le tri, etc?
- Il y a une grande différence entre les tableaux et les listes en python.
Selon la le code source, la taille maximale d'une liste est
PY_SSIZE_T_MAX/sizeof(PyObject*)
.PY_SSIZE_T_MAX
est défini dans pyport.h être((size_t) -1)>>1
Sur un ordinaire système 32 bits, c'est (4294967295 /2) /4 ou 536870912.
Donc la taille maximale d'une liste python sur un système 32 bits est 536,870,912 éléments.
Tant que le nombre d'éléments est égal ou au-dessous de cela, toutes les fonctions de liste devrait fonctionner correctement.
sizeof(PyObject*) == 4?
? Que représente t-il?PyObject *
. Cette chose est une sorte de pointeur(vous pouvez le reconnaître à cause de l'astérisque à la fin) . Les pointeurs sont des 4 octets de long et de stocker une adresse mémoire de l'objet alloué. Ils sont "seulement" 4 octets de long car avec 4 octets, vous pouvez répondre à chaque élément d'un mémoire de nos jours les ordinateurs.PY_SSIZE_T_MAX
considérablement.Comme le La documentation Python dit:
sys.maxsize
Dans mon ordinateur (Linux x86_64):
Sûr que c'est OK. En fait, vous pouvez voir par vous-même facilement:
L'exécution de ces lignes sur ma machine a:
Mais assurez-vous que tout le monde dit. Plus le tableau le plus lent, les activités seront.
Occasionnels code que j'ai créé des listes avec des millions d'éléments. Je crois que Python de la mise en œuvre de listes ne sont liés par la quantité de mémoire sur votre système.
En outre, la liste des méthodes /fonctions devraient continuer à travailler malgré la taille de la liste.
Si vous vous souciez de la performance, il pourrait être intéressant de regarder dans une bibliothèque comme NumPy.
12000 éléments n'est rien en Python... et en fait le nombre d'éléments peuvent aller aussi loin que l'interpréteur Python a de la mémoire sur votre système.
Caractéristiques de Performance pour les listes sont décrites sur Effbot.
Python, les listes sont effectivement mis en œuvre comme vecteur d'accès aléatoire rapide, de sorte que le conteneur va contenir le nombre d'éléments qu'il y a de l'espace dans la mémoire. (Vous avez besoin d'espace pour les pointeurs contenus dans la liste ainsi que de l'espace dans la mémoire pour l'objet(s) d'être souligné.)
Ajout est
O(1)
(amorti constante de la complexité), toutefois, l'insertion dans/suppression à partir du milieu de la séquence nécessitera uneO(n)
(complexité linéaire) réorganisation, qui vous permettra d'être plus lent que le nombre d'éléments dans votre liste.Votre tri question est plus nuancée, car la comparaison opération peut prendre un illimité laps de temps. Si vous effectuez vraiment lent comparaisons, il faudra un long temps, même si c'est pas de la faute de Python liste type de données.
Inversion prend juste le temps nécessaire à l'échange de tous les liens dans la liste (forcément
O(n)
(complexité linéaire), puisque vous touchez chaque pointeur fois).Je dirais que vous êtes seulement limité par la quantité totale de mémoire RAM disponible. Évidemment, plus le tableau le plus des opérations sur les il faudra.
Il varie pour les différents systèmes (dépend de la RAM). La façon la plus simple de le savoir est
import six
six.MAXSIZE
9223372036854775807
Cela donne la taille maximale de
list
etdict
aussi ,comme par le la documentationJ'ai obtenu ce à partir d'ici sur un x64 bits:
Python 3.7.0b5 (v3.7.0b5:abb8802389, Peut 31 2018, 01:54:01) [MSC v. 1913 64 bits (AMD64)] sur win32
Il n'y a pas de limitation de numéro de la liste.
La principale raison qui provoque le message d'erreur est le BÉLIER.
Merci de mettre à jour la taille de votre mémoire.