J'ai un code que j'essaie de comprendre et j'ai besoin d'aide.

import numpy as np
Class_numbers=np.array(['a','b','c'])
students_per_class=np.array([10,20,30])
print("Students counts per class:\n{}".format(
{x: y for x, y in zip(Class_numbers, students_per_class)}))

Production:

Students counts per class:
{'a': 10, 'b': 20, 'c': 30}

Ce que je comprends: 1- nous utilisons {} et .format (...) pour remplacer {} par ...

Voici mes questions:

Q1- Je ne comprends pas "pour x, y en zip (Class_numbers, students_per_class)". Est-ce comme une boucle 2D pour? pourquoi avons-nous besoin du zip? Pouvons-nous avoir une boucle 2d sans fonction zip?

Q2-Je ne comprends pas comment fonctionne x: y! la compilation comprend automatiquement que la définition de x et y (dans "x: y") est décrite dans le reste de la ligne (par exemple pour boucle)?

P.S: Je suis expert en MATLAB mais je suis novice en python et c'est parfois très déroutant!

Ehsan

1
Ehsan 11 avril 2018 à 23:02

3 réponses

Meilleure réponse

Q1: zip est utilisé pour fusionner 2 listes ensemble. Il renvoie le premier élément de chaque liste, puis le 2e élément de chaque liste, etc. C'est une astuce pour considérer les deux listes comme clé et données pour créer un dictionnaire.

Q2: il s'agit d'un dictionnaire (hash), utilisant une méthode appelée "dict comprehension". Il crée le dictionnaire affiché en sortie. Si affecté à une variable d, d['a'] = 10, etc.

4
Dric512 11 avril 2018 à 20:09

zip vous permet d'itérer deux listes en même temps, donc, par exemple, le code suivant

letters = ['a', 'b', 'c']
numbers = [1, 2, 3]

for letter, number in zip(letters, numbers):
    print(f'{letter} -> {number}')

Vous donne en sortie

a -> 1
b -> 2
c -> 3

Lorsque vous itérez avec zip, vous générez deux vars, correspondant à la valeur actuelle de chaque boucle.

1
Freddy 11 avril 2018 à 20:11

Il suffit d'imprimer la ligne que vous ne comprenez pas pour la rendre plus claire ...

Nous définissons d'abord 2 tableaux

Class_numbers=np.array(['a','b','c'])
['a','b','c']

students_per_class=np.array([10,20,30])
[10,20,30]

Zip ajoutez-les simplement comme

[('a', 10), ('b', 20), ('c', 30)]

Maintenant, nous itérons sur chaque élément avec x et y et créons un dict objet (carte de hachage) { key : value}

{'a': 10, 'c': 30, 'b': 20}
0
shahaf 11 avril 2018 à 20:12