python中的for循环和zip

Ehs*_*san 4 python zip for-loop

我有一个我正在尝试理解的代码,我需要帮助。

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)}))
Run Code Online (Sandbox Code Playgroud)

输出:

Students counts per class:
{'a': 10, 'b': 20, 'c': 30}
Run Code Online (Sandbox Code Playgroud)

我的理解:1-我们使用 {} 和 .format(...) 将 {} 替换为 ...

以下是我的问题:

Q1- 我不明白“对于 x, y in zip(Class_numbers, student_per_class)”。它像一个 2d for 循环吗?为什么我们需要拉链?我们可以有没有 zip 功能的 2d 循环吗?

Q2-我不明白 x:y 是如何工作的!编译器自动理解 x 和 y 的定义(在“x:y”中)在行的其余部分(例如 for 循环)中进行了描述?

PS:我是 MATLAB 专家,但我是 Python 新手,有时会很困惑!

埃桑

Dri*_*512 7

Q1:zip用于将2个列表合并在一起。它返回每个列表的第一个元素,然后是每个列表的第二个元素,依此类推。这是将两个列表视为键和数据以创建字典的技巧。

Q2:这是一个字典(hash),使用了一种叫做“dict comprehension”的方法。它创建显示为输出的字典。如果分配给一个变量dd['a'] = 10等等。


Fre*_*ddy 6

zip允许您同时迭代两个列表,例如,以下代码

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

for letter, number in zip(letters, numbers):
    print(f'{letter} -> {number}')
Run Code Online (Sandbox Code Playgroud)

给你作为输出

a -> 1
b -> 2
c -> 3
Run Code Online (Sandbox Code Playgroud)

当您使用 zip 进行迭代时,您会生成两个变量,对应于每个循环的当前值。