[Tutoriel Python] Structure des données

introduction

Il s'agit d'une tentative de lire la 3e édition du didacticiel Python et de noter ce que vous avez appris.

Tutoriel Python 3e édition

Et quand j'aurai fini de lire, j'aimerais passer cet examen À la fin, le test a commencé ...!

** Commençons! ** **

Examen de base pour la certification d'ingénieur Python 3

J'espère que ça continue, j'espère que ça continue

Structure de données

Supplément sur la liste

Toutes les méthodes de l'objet de liste

list.append(x) --Ajouter un élément à la fin de la liste --Equivalent à ʻa [len (a):] = [x] , ʻa + = [x]

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> a.append(333)
>>> a
[66.25, 333, 333, 1, 1234.5, 333]

list.extend(L) --Agrandir la liste en ajoutant tous les éléments de la liste donnée L à la fin de la liste

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> b = [1, 2, 3]
>>> a.extend(b)
>>> a
[66.25, 333, 333, 1, 1234.5, 1, 2, 3]

list.insert(i, x) --Insérer un élément à la position spécifiée --Le premier argument est l'index de l'élément

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> a.insert(2, -1)
>>> a
[66.25, 333, -1, 333, 1, 1234.5]

list.remove(x) --Supprimer le premier élément avec la valeur x --Si un tel élément n'existe pas, une erreur se produira.

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> a.remove(333)
>>> a
[66.25, 333, 1, 1234.5]

list.pop([i]) --Supprime l'élément à la position spécifiée de la liste et renvoie cet élément --Si aucun index n'est spécifié, a.pop () renvoie le dernier élément de la liste et le supprime de la liste.
* Les crochets utilisés pour entourer l'index i dans cette signature de méthode (notation de définition) sont , Indique uniquement que l'argument est facultatif **, et un coin à cette position Cela ne signifie pas que vous devez entrer des parenthèses. Ces notations sont souvent vues dans les références de bibliothèques.

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> a.pop()
1234.5
>>> a
[66.25, 333, 333, 1]
>>> a.pop(2)
333
>>> a
[66.25, 333, 1]

list.clear() --Supprimer tous les éléments de la liste --Equivalent à del a [:]

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> a.clear()
>>> a
[]

list.index(x) --Retourne l'index du premier élément avec une valeur de x --Si un tel élément n'existe pas, une erreur se produira.

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> a.index(1)
3

list.count(x) --Retourne le nombre de x dans la liste

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print(a.count(333), a.count(66.25), a.count('x'))
2 1 0

list.sort(key=None, reverse=False) --Trier la liste sur place (= directement l'objet de la liste sans faire de copie) --Le tri peut être personnalisé avec des arguments

>>> a = [333, 1234.5, 1, 333, -1, 66.25]
>>> a.sort()
>>> a
[-1, 1, 66.25, 333, 333, 1234.5]
>>> a.sort(reverse=True)
>>> a
[1234.5, 333, 333, 66.25, 1, -1]

list.reverse()

>>> a = [333, 1234.5, 1, 333, -1, 66.25]
>>> a.reverse()
>>> a
[66.25, -1, 333, 1, 1234.5, 333]

list.copy() --Renvoie une copie superficielle de la liste --Equivalent à ʻa [:] `

>>> a = [333, 1234.5, 1, 333, -1, 66.25]
>>> a.copy()
[333, 1234.5, 1, 333, -1, 66.25]

Utilisez la liste comme une pile

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack
[3, 4, 5]
>>> stack.pop()
5
>>> stack
[3, 4]

Utiliser la liste comme file d'attente

--Dans la file d'attente, récupérez les éléments dans l'ordre dans lequel ils ont été placés --`` appendetpop à la fin de la liste sont rapides, mais ʻinsert et pop au début de la liste sont lents
(cela nécessite que tous les autres éléments soient décalés de 1) Pour)

>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry")
>>> queue.append("Graham")
>>> queue.popleft()
'Eric'
>>> queue.popleft()
'John'
>>> queue
deque(['Michael', 'Terry', 'Graham'])

Inclusion de liste

Un programme qui génère une liste de carrés


>>> squares = []
>>> for x in range(10):
...     squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Un programme qui génère une liste de carrés (lors de l'utilisation de l'expression lamdba)


>>> squares = list(map(lambda x: x**2, range(10)))
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Un programme qui génère une liste de carrés (lors de l'utilisation de l'inclusion de liste)


>>> squares = [x**2 for x in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Une inclusion de liste consiste en une expression suivie d'une clause «for», suivie de zéro ou plus de clauses «for» ou de clauses «if», toutes placées entre parenthèses ([]).

Ce que vous obtenez est une nouvelle liste de valeurs qui évaluent la première expression dans le contexte des clauses for et if suivantes.

Par exemple, l'inclusion de liste suivante prend des éléments de deux listes et les rassemble dans un taple s'ils ne sont pas identiques.

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x !=y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

Ceci est équivalent au programme suivant

>>> combs = []
>>> for x in [1,2,4]:
...     for y in [3,1,4]:
...             if x != y:
...                     combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (4, 3), (4, 1)]

Notez que les instructions for et if du programme ci-dessous sont dans le même ordre. Les crochets de cercle sont requis lorsque l'expression est tapul

>>> #Générer une nouvelle liste avec des valeurs doublées
>>> vec = [-4, -2, 0, 2, 4]
>>> [x*2 for x in vec]
[-8, -4, 0, 4, 8]
>>> #Filtrer pour supprimer les nombres négatifs
>>> [x for x in vec if x >= 0]
[0, 2, 4]
>>> #Appliquer la fonction à tous les éléments
>>> [abs(x) for x in vec]
[4, 2, 0, 2, 4]
>>> #Appeler une méthode pour chaque élément
>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
>>> #Taple binaire(Valeur numérique,Prix carré)Générer une liste de
>>> [(x, x**2) for x in range(6)]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
>>> #Une erreur se produira si le taple n'est pas entre parenthèses.
>>> [x, x**2 for x in range(6)]
  File "<stdin>", line 1
    [x, x**2 for x in range(6)]
               ^
SyntaxError: invalid syntax
>>> #Lisser (unidimensionnel) la liste en utilisant deux pour
>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Les inclusions de liste peuvent contenir des expressions composées et des fonctions imbriquées

>>> from math import pi
>>> [str(round(pi, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']

Inclusion de liste imbriquée

Une matrice 3x4 implémentée avec 3 listes de longueur 4


>>> matrix = [
...     [1, 2, 3, 4],
...     [5, 6, 7, 8],
...     [9, 10, 11, 12],
... ]

Permuter les lignes et les colonnes


>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Le programme ci-dessus équivaut à

>>> transposed = []
>>> for i in range(4):
...     transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Autrement dit, équivalent à

>>> transposed = []
>>> for i in range(4):
...     transposed_row = []
...     for row in matrix:
...             transposed_row.append(row[i])
...     transposed.append(transposed_row)
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

De manière réaliste, utilisez des fonctions intégrées pour les flux complexes La fonction zip peut être utilisée dans ces situations

>>> list(zip(*matrix))
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

déclaration del

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

del peut également être utilisé pour supprimer une variable entière

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

Tapez et séquence

--Taple se compose de valeurs séparées par des virgules

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> #Les taples peuvent être imbriqués
>>> u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
>>> #Taple ne peut pas être changé
>>> t[0] = 88888
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

Peut stocker des objets variables

>>> v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])

Les taples de sortie sont toujours entre parenthèses, de sorte que les taples imbriqués sont également interprétés correctement. Il n'est pas possible d'affecter à un élément dans un tuple, mais il est possible de générer un tuple contenant des objets mutables tels que des listes.

Les taples ressemblent à des listes, mais ils sont utilisés dans différentes situations et ont des usages différents. Les taples sont ** immuables **, et il est habituel de créer une séquence d'éléments dissemblables et d'accéder à chaque élément par décompression ou par index (ou même un attribut dans le cas d'un nom mois taple).

Les listes sont ** mutables **, généralement constituées d'éléments similaires, et accessibles en itérant sur la liste.

Il y a un problème spécial à faire un tapple avec 0 ou 1 éléments (il est impossible de le distinguer des autres types car il n'y a pas de virgule de délimitation), donc la syntaxe a un échappement pour traiter ces derniers. Tout d'abord, un taple vide est fait en vidant une paire de parenthèses. Et un élément taple est fait en ajoutant une virgule après une valeur

>>> empty = ()
>>> singleton = 'hello',
>>> len(empty)
0
>>> singleton
('hello',)

La phrase suivante est un exemple d'emballage de tapple (emballage de taple) 12345, 54321, bonjour! Sont dans un même robinet

>>> t = 12345, 54321, 'hello!'
>>> t
(12345, 54321, 'hello!')

Le traitement suivant est appelé ** déballage de séquence **, et toute séquence peut venir universellement. Lors du déballage d'une séquence, vous avez besoin d'une liste de variables sur le côté gauche égale à la longueur de la séquence. Notez que l'affectation multiple est juste une combinaison de conditionnement de tapple et de déballage de séquence.

>>> t = 12345, 54321, 'hello!'
>>> x, y, z = t
>>> x
12345
>>> y
54321
>>> z
'hello!'

Ensemble

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)
{'orange', 'pear', 'banana', 'apple'}
>>> 'orange' in basket
True
>>> 'crabgrass' in basket
False

Démontrer les opérations d'ensemble en prenant des caractères (uniques) sans chevauchement de deux mots

>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> #Caractère unique d'un
>>> a
{'b', 'r', 'a', 'd', 'c'}
>>> #Caractères qui existent dans a mais pas dans b
>>> a - b
{'r', 'b', 'd'}
>>> #Caractères présents dans a ou b
>>> a | b
{'l', 'm', 'b', 'z', 'r', 'a', 'd', 'c'}
>>> #Caractères qui existent à la fois dans a et b
>>> a & b
{'a', 'c'}
>>> #Caractères inhabituels dans a ou b
>>> a ^ b
{'m', 'b', 'z', 'r', 'd', 'l'}

Les inclusions définies qui sont similaires aux inclusions de liste sont également prises en charge

>>> a = { x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

Dictionnaire (Dictionnaire)

>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'jack': 4098, 'sape': 4139, 'guido': 4127}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'jack': 4098, 'guido': 4127, 'irv': 4127}
>>> list(tel.keys())
['jack', 'guido', 'irv']
>>> sorted(tel.keys())
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False

Le constructeur dict construit un dictionnaire à partir d'une séquence de tapples de paires" clé: valeur ".

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'guido': 4127, 'jack': 4098}

Les dictionnaires peuvent être générés à partir d'expressions arbitraires qui donnent des clés et des valeurs à l'aide d'inclusions de dictionnaire

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

Si la clé est une simple chaîne, il peut être plus facile de spécifier la paire avec l'argument mot-clé.

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'guido': 4127, 'jack': 4098}

Technique de boucle

Lorsque vous bouclez un dictionnaire, vous pouvez utiliser la méthode ʻitems () `pour obtenir la clé et sa valeur correspondante en même temps.

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

Lors de la boucle d'une séquence, vous pouvez utiliser la fonction ʻenumerate () `pour obtenir l'index de position et la valeur correspondante en même temps.

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

Si vous voulez faire une boucle sur deux séquences en même temps, vous pouvez utiliser la fonction zip () pour jumeler les entrées des deux sociétés.

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}? It is {1}.'.format(q, a))
...
What is your name? It is lancelot.
What is your quest? It is the holy grail.
What is your favorite color? It is blue.

Pour boucler la séquence dans l'ordre inverse, spécifiez d'abord la séquence dans l'ordre avant, puis appelez la fonction reverse ().

>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

Utilisez la fonction sorted () pour boucler la séquence dans l'ordre trié Cette fonction ne touche pas la séquence d'origine et renvoie une liste nouvellement triée

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

Si vous souhaitez modifier une liste en boucle, il est plus facile et plus sûr de créer une nouvelle liste

>>> import math
>>> raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8]
>>> filtered_data = []
>>> for value in raw_data:
...     if not math.isnan(value):
...             filtered_data.append(value)
...
>>> filtered_data
[56.2, 51.7, 55.3, 52.5, 47.8]

Informations supplémentaires sur les conditions

--Tout opérateur peut être utilisé pour les conditions utilisées dans les instructions while et ʻif, pas seulement pour la comparaison. --Les opérateurs de comparaison ʻin et not in vérifient si une valeur existe dans la séquence

La comparaison et d'autres résultats booléens peuvent être affectés à des variables


>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'

Comparaison de séquence, comparaison d'autres types

le terme

En place

Copie superficielle

--La copie peu profonde crée un nouvel objet composé, puis (autant que possible) insère une référence à l'objet trouvé dans l'objet d'origine. --Référence: bibliothèque standard Python 8.10. Copy - Copie superficielle et opérations de copie profonde

Recommended Posts

[Tutoriel Python] Structure des données
structure de données Python push pop
[Tutoriel Python] Outil de structure de contrôle
Tutoriel Python
Algorithme de structure de données de livre d'images Python
Tutoriel Python Django (5)
Analyse de données python
Tutoriel Python Django (8)
Tutoriel Python Django (6)
Structure interne de Python
Tutoriel Python Django (7)
Tutoriel Python Django (1)
Tutoriel du didacticiel Python Django
Tutoriel Python Django (3)
[python] Lecture de données
Tutoriel Python Django (4)
Structure de données Python et implémentation interne ~ Liste ~
Structure et fonctionnement des données Python (mémo d'apprentissage Python ③)
Analyse de données avec python 2
Tutoriel [Docker] (Python + php)
Résumé du didacticiel Python Django
Bibliothèques de visualisation de données Python
Présentation de l'analyse de données python
Nettoyage des données à l'aide de Python
Structure de type langage C en Python
Modèle d'analyse de données Python
Mémo du didacticiel Python OpenCV
[Python] Tri des données Numpy
Tutoriel Cloud Run (python)
Analyse de données avec Python
Exemple de données créées avec python
Mon conteneur d'analyse de données python
Gérer les données ambiantes en Python
Python pour l'analyse des données Chapitre 4
Afficher les données UTM-30LX en Python
Obtenez des données Youtube avec python
Mon environnement d'analyse de données python
Application Python: visualisation de données, partie 2: matplotlib
[Python] Tutoriel personnel sur l'arbre de décision
Notes d'apprentissage sur l'analyse des données Python
Python pour l'analyse des données Chapitre 2
Fiche technique du didacticiel Python Django
Conversion de type de données d'image [Python]
Analyse de données à l'aide de pandas python
python> tuple> données, adresse = s.recvfrom (10000)
Python pour l'analyse des données Chapitre 3
Lire des données json avec python
Obtenez des données LeapMotion en Python.
[Français] scicit-learn 0.18 Tutorial Manipulation des données de texte
Analyse des ondes cérébrales avec Python: tutoriel Python MNE
[Python] Comment FFT des données mp3
Mémorandum de développement ~ pandas, prévisions, structure de données ~
Application de Python: Nettoyage des données Partie 1: Notation Python
Acquisition de données à l'aide de l'API googlemap de python
Analyse de la structure du squelette en trois dimensions avec Python
Python
Lire les données des tampons de protocole avec Python3
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
Obtenir des données de Quandl en Python
Application Python: Traitement des données # 3: Format des données
L'ajustement expérimental des données (Python) est en cours d'ajout ...