微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.join() 在这个列表理解中做了什么?

如何解决.join() 在这个列表理解中做了什么?

代码如下:

board = [' ',' ',' ' ]
for row in [board[i*3:(i+1) * 3] for i in range(3)]:
     print('| ' + ' | '.join(row) +' |')

代码产生以下输出

output1

这里的目标是打印井字游戏板。我从我正在观看的教程中提取了这个片段。

我的问题是,.join(row) 到底在做什么?

为了提供更多上下文,我知道 .join() 方法用于将可迭代对象中的项目附加到字符串。所以据我所知,不应该在项目中添加三个空格,' | ' 这样它看起来像: ' | '?不过这不会发生。相反,一个额外的空间分布在三个“|”之间。

此外,当我玩弄这段代码时,会发生一些我无法解释的奇怪事情。它们如下:

  1. 当您使用 .join(row) 时,它会生成另一列“|”。如果你完全摆脱它,你只有三列'|'而不是四个。

  2. 如果将范围从 range(3) 更改为 range(4),则会打印以下内容

|   |   |   |
|   |   |   |
|   |   |   |
|  |

然而,如果你只是简单地写在另一个 ' | 实例中而不是 .join() ' 要打印,它只会打印原始输出,并在底部添加一行。

  1. 如果您将 board[i3:...] 更改为 board[i2:...],它会打印以下内容

|   |   |   |
|   |   |   |   |
|   |   |   |   |   |

同样,如果您不使用 .join(row) 方法,则不会发生这种奇怪的行为。它只是打印出与 3 时完全相同的输出

  1. 最后,如果您将板片的大端从 board[board[i3:(i+1) * 3] 更改为 board[i3:(i+1) * 2],它打印以下内容

|   |   |
|   |
|  |

有没有人能理解 .join(row) 在这里做什么以及它是如何做的?

显然,为 tic tac toe 打印一个板子已经很简单了,但我两天来一直在努力理解这个列表理解,但仍然没有破解这里发生的事情。

另外,如果有任何帮助,在教程中她解释说,“.join 只是说将它们连接到一个字符串中,其中分隔符是这条垂直线”

解决方法

条形之间有 3 个空格。 现在让我们破解代码:

[board[i*3:(i+1) * 3] for i in range(3)] 
will give
[[' ',' ',' '],[' ',' ']]

当我们遍历上面的列表时,每一行都是

[' ',' ']

所以' | '.join(row) 基本上是加入了 3 个空格 witj ' | '

print('| ' + ' | '.join(row) +' |')

上面的print语句等价于

print('| ' + '  |   |  ' + ' |')

为清楚起见,我使用 # 而不是空格 ( )

print('|#' + '##|###|##' + '#|')    
,

此代码

[board[i*3:(i+1) * 3] for i in range(3)]

有效地创建一个类似于 board 的新列表,但作为一个 3x3 2d 列表:

[
  [' ',]

现在,当我们在循环中对其进行迭代时,我们将从上面的二维列表中获取每一行。
当我们加入其中一行时,我们将有效地在 ' | ' 的每个元素之间插入 row

.join 实际上不在任何列表推导式中,它位于在列表推导式列表上的 for 循环迭代的主体中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?