【问题标题】:What does adding a second parameter in a for loop with nested enumerate() do?在嵌套 enumerate() 的 for 循环中添加第二个参数有什么作用?
【发布时间】:2020-02-19 18:48:23
【问题描述】:

我再次尝试使用 Python,我想创建一个基于文本的 Ticktacktoe。

目前,我正在处理布局,其中 0 代表游戏中的空白区域,顶部和左侧的数字表示坐标。这是我目前所拥有的:

game = [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],]

print('   0  1  2')

for row in enumerate(game):
    print(row)

输出这个:

     0  1  2
(0, [0, 0, 0])
(1, [0, 0, 0])
(2, [0, 0, 0])

问题是我希望它看起来像这样:

   0  1  2
0 [0, 0, 0]
1 [0, 0, 0]
2 [0, 0, 0]

现在我找到了一种方法,将“count”添加到 for 循环中。但我完全不明白为什么。 查找 Python 文档并没有帮助。 为什么会这样?为什么要去掉括号和逗号?

game = [[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],]

print('   0  1  2')

for count, row in enumerate(game):
    print(count, row)

编辑:我想我现在明白了。因为enumarate() 返回索引和值,所以基本上发生的事情是我将count 分配给索引和行基本上是值?这就是为什么现在有括号,因为 print 使用空格打印多个变量?你能确认一下吗?

【问题讨论】:

    标签: python list for-loop enumerate


    【解决方案1】:

    for row in enumerate(game):

    这将打印row,这是一个元组。元组以格式打印 (项目1,项目2,...)

    例子:

    >>> row = (5, [0,0,0])
    >>> print(row)
    (5, [0,0,0]) 
    

    for count, row in enumerate(game): 在这里,结果被解包。元组现在被拆分为countrowprint 可以接受可变数量的参数,默认情况下用空格分隔它们。

    例子:

    >>> count = 5
    >>> row = [0,0,0]
    >>> print(count, row)
    5 [0,0,0]
    

    嵌套列表

    嵌套列表是包含其他列表的列表。一个简单的例子是

    nested = [[0,1,2], [3,4,5]]
    

    您可以解压缩嵌套列表(或任何列表)

    list012, list345 = nested
    

    这就是for count, row in enumerate(game): 正在做的事情。

    enumerate(game) 返回一个元组:一个计数器和普通对象。我们可以这样比较:

    my_list = [10,20,30]
    for i in my_list:
        print i    # prints 10 20 30
    for i in enumerate(my_list):
        print i    # prints (0,10) (1,20) (2,30)
    

    【讨论】:

    • 您能否详细说明一下嵌套列表?我想我开始掌握它了。您能否更详细地说明解构的含义?
    • 更新了我的答案
    【解决方案2】:

    在第一个例子中,一个元组将被传递给print(),它被打印在括号中。在第二个答案中,行数和行本身作为单独的参数传递给print() - 然后print() 将打印分隔的参数空间。

    【讨论】:

      【解决方案3】:

      enumerate(items) 返回一个由数字和您的项目组成的元组列表,其中列表中的每个新项目的数字都会增加一(计数)。 在这种情况下,枚举返回以下元组:

      {0, [0, 0, 0]}, {1, [0, 0, 0]}, {2, [0, 0, 0]}
      

      通过在 for 循环中使用第二个变量名,您可以将元组解构为 countrow。而之前你只给出了 1 个变量名,所以变量被分配了整个元组。

      【讨论】:

      • 我知道它被解构了,但是变成了什么? countrow 被分配到列表的哪个部分?还是我理解错了?你能用我的代码中的嵌套列表的另一个例子来详细说明吗?
      • @itsolidude 元组被解构。
      猜你喜欢
      • 2013-08-04
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 2021-09-11
      相关资源
      最近更新 更多