Comparons les types de tableaux Python

Cet article est l'article du 14e jour du Calendrier de l'Avent 2019 NCC.

introduction

Lors de l'écriture d'un programme, un tableau est important. Cependant, il existe un ** problème de trop grand nombre de type tableau Python **. Même avec les fonctionnalités Python standard listdictsettuple il y a. De plus, lorsque vous commencez à utiliser une bibliothèque telle que numpy, vous en trouverez d'autres similaires.

Donc, cette fois, je vais les expliquer afin qu'ils puissent être utilisés correctement dans les quatre points suivants.

  1. Vue d'ensemble
  2. Bons points
  3. Mauvais endroit
  4. Impressions

Puisqu'il s'agit d'un article pour ** une utilisation correcte **, je ne parlerai pas d'une utilisation détaillée. Aussi, je vais l'écrire en supposant que je sais en quelque sorte ce qu'est le tableau. Je vais expliquer en utilisant des mots simples autant que possible.

Public cible

Que ramasser

Fonctionnalités standard de Python

Bibliothèque

numpy

Histoire principale

list

Aperçu

La liste est simplement ** la plus basique **. C'est la même chose qu'un tableau général dans d'autres langages, et en Python, on l'appelle généralement une "liste". Le symbole est «[]», donc s'il est entouré de ceci et qu'il y en a beaucoup à l'intérieur, considérez-le comme une liste.

En Python, il peut y avoir plusieurs types dans la liste. Vous pouvez également saisir autant de valeurs identiques que vous le souhaitez. De plus, il a la fonction d'un tableau, qui est généralement appelé.

Plus tard, quand j'expliquerai le «dict» suivant, je pense que je le compare souvent avec «list», donc je pense que ce serait bien si vous pouviez comprendre la nature de «list» tout en le regardant. (Parce que c'est un gars normal, il n'y a pas beaucoup d'explications.)

Bon point

--Facile à manier ――Vous pouvez l'implémenter en utilisant simplement list sans penser aux choses difficiles.

Mauvais cousin

――Il devient difficile à comprendre à mesure que le nombre de dimensions augmente --Je ne peux pas voir la longueur de chaque tableau à la fois (il n'y a pas de shape dans numpy)

Impressions

L'origine, bonne ou mauvaise. Même avec «numpy» ou «pandas», il est également difficile de le convertir en «liste» et de l'utiliser ensuite. C'est aussi «liste» lorsque la longueur est indéfinie dans une dimension, ou lorsque l'ordre a un sens mais que le nombre n'a pas de sens. Cependant, il n'est pas très approprié pour le multi-dimensionnel. (Ne concevez pas trop de dimensions en premier lieu) Il est rafraîchissant de combiner avec numpy pour les valeurs numériques et dict pour les données complexes.

dict

Aperçu

C'est ce qu'on appelle le ** tableau associatif **. En Python, c'est un type de dictionnaire ou dictionary ( dict pour faire court). Le symbole est «{}», et chaque élément est connecté par «:» comme «{key: value}». Je ne vais pas expliquer en détail avec des exemples. Veuillez vous référer à la référence etc.

Je pense que le type clé de dict pourrait être n'importe quoi, mais il est plus facile à comprendre si vous utilisez une chaîne ou un entier. De plus, lorsque le contenu est plein, il est plus facile de voir si vous commencez une nouvelle ligne avec key. Aussi, alignons les retraits. (Comme json) Voici un exemple.


ncc = { 'name': 'ncc',
        'full name': 'nakano computer club',
        'estimate': 2015,
        'web site': 'https://meiji-ncc.tech/'
        }

Bon point

--Facile à comprendre --Facile à utiliser avec json --Une chaîne de caractères peut être utilisée comme référence

Mauvais cousin

--Si vous n'y êtes pas habitué, cela provoquera une erreur ――Il est difficile de sortir quand ça devient profond

Impressions

Lorsque la valeur et son nom sont importants, c'est à vous de décider! Même avec des nombres, «dict» est plus facile à gérer lorsque les intervalles sont irréguliers. De plus, avant de convertir en «DataFrame» de «pandas» (bibliothèque), il est souvent résumé une fois avec «dict». Parce que c'est plus facile à manipuler. Je pense que vous devriez l'utiliser dans l'image qui relie «clé» et «valeur». Il est pratique de traiter avec json. .. (Facile à lire et à écrire avec la bibliothèque json)

set

Aperçu

L'expression simple pour set est ** no cover list **. Le symbole est «{}», qui est le même que «dict», mais n'utilise pas «:». Comme pour list, les valeurs sont organisées par,. Donc, s'il est entouré de {} et qu'il y a beaucoup de ,, c'est set. À proprement parler, il représente un ensemble. Vous pouvez donc également effectuer des opérations de réglage. (Je n'y toucherai pas ici)

list peut avoir la même valeur que [0, 1, 2, 1, 0], mais pas avec set. La conversion de la «liste» ci-dessus en «ensemble» donne «{0, 1, 2}». C'est la même chose sauf pour les nombres.

Pour le mettre dans l'autre sens, si vous voulez éliminer le couvercle, vous pouvez le convertir en set. Dans ce cas, si vous voulez le traiter à nouveau comme une liste, vous devez le convertir du haut de set à list et le renvoyer dans la liste. J'écrirai un exemple.

list_duplicate = [0, 1, 2, 2, 1, 0, 3]
list_non_duplicate = list(set(list_duplicate))
print(list_non_duplicate) # out: [0, 1, 2, 3]

Bon point

--Peut être mis sans couverture --Une opération définie est possible

Mauvais cousin

Impressions

Il est rarement utilisé dans set depuis le début. Il est souvent converti à partir de la liste lorsque vous souhaitez supprimer la couverture ou lorsque vous souhaitez extraire les parties communes des éléments de plusieurs listes. Par conséquent, vous devez penser qu'il est utilisé lorsque vous adoptez une approche collective au moment de la mise en œuvre.

tuple

Aperçu

Doit-on appeler «tuple» ** une petite liste «raide» **? Il y a une petite habitude. Le symbole est «()».

C'est fondamentalement comme «list», mais c'est différent. En gros, ** je ne peux pas jouer avec ce que j'ai fait **. Vous pouvez ajouter un autre taple après. (1) Vous pouvez également changer le taple lui-même en autre chose. (2) De plus, les éléments ne peuvent pas être réécrits. C'est un peu difficile, alors je vais vous montrer un exemple.

t = (0, 1, 2)
#Ajouter taple derrière
t += (3, 4) # OK(1)
#Réécrire le taple lui-même
t = (0, 1, 2) # OK(2)
#Réécrire des éléments
t[0] = 1 # Error

Il n'y a pas de méthodes pour attribuer ou supprimer. De plus, comme les éléments ne peuvent pas être réécrits, l'ordre spécifique ne peut pas être modifié. Pour ce faire, vous devez le convertir en liste.

Bon point

--Une fois fait, il ne peut pas être réécrit

Mauvais cousin

Impressions

Puisque Python n'a pas de type qui représente une constante (const en js), vous pouvez le faire avec tuple d'une manière pseudo. Cependant, je ne l'utilise pas beaucoup car je ne peux rien faire de dynamique. La valeur de retour de la méthode de la bibliothèque peut être tuple, donc je l'utilise simplement ici.


Ensuite, nous allons passer à l'explication du système de tableaux dans la bibliothèque Python numpy. Avant cela, j'expliquerai brièvement le "numpy".

(Supplément) Qu'est-ce que «numpy»?

numpy est une bibliothèque qui peut effectuer des opérations matricielles effectuées par algèbre linéaire. Addition et soustraction d'éléments de tableau. Il peut être utilisé lors de la multiplication du tableau entier par une valeur numérique. Vous pouvez faire des choses plus avancées, mais ce n'est pas grave si vous pensez que le ** calcul numérique des tableaux sera pratique **.

numpy.array/numpy.ndarray

Aperçu

Le tableau unidimensionnel de «numpy» est «numpy.array». Multidimensionnel est numpy.ndarray. Le traitement ne change pas beaucoup qu'il soit unidimensionnel ou multidimensionnel. Puisqu'il s'agit d'une bibliothèque, elle ne peut pas être représentée par un symbole spécifique. Il sera converti si vous entourez list etc. dans numpy.array ().

import numpy as np

#Définir une liste régulière
list_num0 = [0, 1, 2, 3, 4]

#Convertir en tableau numpy
np_num0 = np.array(list_num0)
print(np_num0) # out: [0 1 2 3 4]

#Générer directement un tableau numpy
np_num1 = np.array([5, 6, 7, 8, 9])
print(np_num1) # out: [5 6 7 8 9]

#Convertir un tableau numpy en liste
list_num1 = list(np_num1) 
print(list_num1) # out: [5, 6, 7, 8, 9]

#Double chaque liste et tableau numpy
list_num0_twice = 2*list_num0
print(list_num0_twice) # out: [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
np_num0_twice = 2*np_num0
print(np_num0_twice) # out: [0 2 4 6 8]

# list,Essayez d'ajouter chacun avec un tableau numpy
list_num_add = list_num0 + list_num1
print(list_num_add) # out: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
np_num_add = np_num0 + np_num1
print(np_num_add) # out: [ 5  7  9 11 13]

De cette façon, vous pouvez facilement effectuer des opérations dans les éléments d'un tableau avec numpy.array.

Bon point

Mauvais cousin

――C'est difficile à gérer à moins de s'y habituer

Impressions

Si vous voulez faire des choses mathématiques, c'est vraiment "numpy". Cela va bien avec une bibliothèque appelée scipy qui peut effectuer des calculs appliqués (comme l'intégration). Si vous vous habituez à faire beaucoup de calculs, vous devriez l'essayer. Il est facile à utiliser si vous comprenez la différence avec «list».

numpy.matrix --Je ne l'ai jamais utilisé ―― J'ai vérifié diverses choses, mais il semble que vous devriez utiliser ndarray --Il semble pratique lors de l'utilisation d'une matrice m × n

Résumé

Voici un résumé de chacun en un mot.

list: Basique dict: lien fort entre le nom et la valeur set: liste non couverte tuple: liste non réinscriptible numpy.array / numpy.ndarray: Spécialisation de calcul numérique list Je ne l'utilise pas car je suis confondu avec numpy.matrix: numpy.ndarray

organigramme

Voici un diagramme montrant en quelque sorte le flux lors du choix de celui à utiliser personnellement. flowchart.png

En fait, c'est un peu plus compliqué, mais jusqu'à ce que vous vous y habituiez, vous devriez penser comme ça. Puisque tuple n'est pas utilisé, il n'est pas inclus. (En fait, je n'utilise pas trop set)

À la fin

Cette fois, j'ai comparé les types de tableaux Python. Il y en a plus si vous incluez les détails et les bibliothèques. Cependant, puisque ce domaine est la base, si vous pouvez comprendre ce domaine, je pense que d'autres compréhensions s'amélioreront.

Recommended Posts

Comparons les types de tableaux Python
Comparez la vitesse d'ajout et de carte Python
Trouvez le maximum de Python
le zen de Python
[Python] Fractionner la date
Comparer des chaînes en Python
python3 Mesurez la vitesse de traitement.
Vers la retraite de Python2
Trouver des erreurs en Python
À propos du module Python venv
Comparez les polices de jupyter-themes
À propos de la fonction enumerate (python)
[Python] Ajustement de la barre de couleurs
[Python] Récupérez le mois précédent
[Python 2/3] Analyser la chaîne de format
Appelez l'API avec python3.
À propos des fonctionnalités de Python
[Python] Vérifiez les bibliothèques installées
J'ai téléchargé la source python
Le pouvoir des pandas: Python
Trouvez la valeur maximale python (amélioré)
Laissez le traitement gênant à Python
[Python] Vérifiez le répertoire actuel, déplacez le répertoire
Extraire le fichier xz avec python
Obtenir l'API arXiv en Python
Vérifiez le comportement lors de l'attribution de Python
[Python] Trouvez la deuxième plus petite valeur.
[Python] La pierre d'achoppement de l'importation
First Python 3 ~ Le début de la répétition ~
Python dans le navigateur: la recommandation de Brython
AtCoder: Python: Papa, l'exemple de test.
Frappez l'API Sesami en Python
Essayez le SDK Python LINE Pay
[Python] Accédez à l'API Google Translation
Obtenez le chemin du bureau en Python
"La classe d'introduction Python la plus simple" modifiée
[Python] Qu'est-ce que @? (À propos des décorateurs)
Existence du point de vue de Python
Obtenez la météo avec les requêtes Python
Obtenez la météo avec les requêtes Python 2
pyenv-changer la version python de virtualenv
Obtenez le chemin du script en Python
Dans la commande python, python pointe vers python3.8
Implémenter le modèle Singleton en Python
[Python] Ajuster la norme de la carte des couleurs
Comment obtenir la version Python
Trouvez la distance d'édition (distance de Levenshtein) avec python
[python] Quelle est la clé triée?
Accédez à l'API Etherpad-lite avec Python
Installer le plug-in Python avec Netbeans 8.0.2
[Python] Faire de la fonction une fonction lambda
Demandez à python de lire la sortie de la commande
Accédez à l'API Web en Python
[Python] Comprendre le potentiel_field_planning de Python Robotics
J'ai aimé le tweet avec python. ..
Revue des bases de Python (FizzBuzz)