【问题标题】:For loop and zip in pythonpython中的for循环和zip
【发布时间】:2018-09-21 20:12:17
【问题描述】:

我有一个代码,我正在努力理解,我需要帮助。

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- 我不明白“对于 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 新手,有时会很困惑!

Ehsan

【问题讨论】:

  • 自称为专家的人通常声称他们知道的比他们知道的多

标签: python for-loop zip


【解决方案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 迭代时,你会生成两个 var,对应每个循环的当前值。

【讨论】:

    【解决方案2】:

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

    Q2:这是一个字典(散列),使用一种称为“字典理解”的方法。它创建显示为输出的字典。如果分配给变量dd['a'] = 10等。

    【讨论】:

      【解决方案3】:

      只打印你不明白的那一行,让它更清楚......

      首先我们定义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}
      

      【讨论】:

        【解决方案4】:

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

        示例:

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

        解释:

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

        【讨论】:

          【解决方案5】:

          使用 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))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-06-18
            • 1970-01-01
            • 2020-10-18
            • 2023-01-25
            • 1970-01-01
            • 2011-07-15
            • 1970-01-01
            相关资源
            最近更新 更多