for python

时间:2018-04-11 20:02:55

标签: python for-loop zip

我有一个我想要了解的代码,我需要帮助。

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)”。这是一个2d for循环吗?为什么我们需要拉链?我们可以使用带有zip功能的2d循环吗?

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

P.S:我是MATLAB的专家,但我是python的新手,有时候很混乱!

伊赫桑

5 个答案:

答案 0 :(得分:2)

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

Q2:这是一个字典(哈希),使用名为" dict comprehension"的方法。它创建显示为输出的字典。如果已分配给变量dd['a'] = 10

答案 1 :(得分:1)

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进行迭代时,会生成两个变量,对应于每个循环的当前值。

答案 2 :(得分: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}

答案 3 :(得分:0)

<块引用>

zip 可用于枚举 2 个不同列表中的元素和 制作单个列表

示例:

 x: y for x, y in zip(Class_numbers, students_per_class)
<块引用>

说明:

  • 元素形式 Class_number 被分配给 x,它是字典的“键” 并且 student_per_class 被分配给 y,这是一个“值
  • 直到循环结束,它将迭代到字典。

答案 4 :(得分: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))