Python中的For循环和zip函数

11

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

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)}))

输出:

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

我理解的内容: 1- 我们使用 {} 和 .format(...) 来用 ... 替换 {}
以下是我的问题:
Q1- 我不理解 "for x, y in zip(Class_numbers, students_per_class)"。这是否类似于二维循环?为什么我们需要zip?我们能够没有zip函数而有二维循环吗?
Q2- 我不理解如何使用x:y!编译器是否自动理解“x:y”中x和y的定义(例如在for循环中)在该行的其余部分中已说明?
附注:我精通MATLAB,但我刚接触Python,有时会感到非常困惑!
艾赫桑

自认为专家的人通常声称自己比实际上更懂。 - eagle
5个回答

20

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

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

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

输出结果为

a -> 1
b -> 2
c -> 3
当你使用zip进行迭代时,会生成两个变量,分别对应每个循环的当前值。

8

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

问题2: 这是一个使用名为 "dict comprehension" 的方法创建的字典(哈希表)。它创建了所示的输出字典。如果赋值给变量d,则可以执行d['a'] = 10等操作。


2

zip函数可以用于枚举两个不同列表中的元素,并将它们组合成一个新的列表。

例如:

 x: y for x, y in zip(Class_numbers, students_per_class)

解释:

  • 元素form Class_number被分配给x,x是字典中的“键(key)”,students_per_class被分配给y,y是字典中的“值(value)”。
  • 循环遍历字典,直到循环结束。

0

只需打印你不理解的那一行,以使其更清晰...

首先,我们定义了2个数组

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

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

zip 就像把它们加在一起一样

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

现在我们对每个元素进行迭代,使用x和y创建一个dict对象(哈希映射){key: value}
{'a': 10, 'c': 30, 'b': 20}

0

使用zip有一个诀窍:

letters = ('A', 'B', 'C')
numbers = ('1', '2', '3')
let_num = zip(letters, numbers)

使用list()函数显示zip:
print(list(let_num))

上述代码将产生以下结果

[('A', '1'), ('B', '2'), ('C', '3')]

请注意,如果您想再次打印,这将不会打印任何内容,因为我们已经使用了 zip 函数。

print(list(let_num))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接