【问题标题】:Zero populating array in pythonpython中的零填充数组
【发布时间】:2021-03-24 17:34:09
【问题描述】:

我试图弄清楚如何用零填充数组,但遇到了这个让我感到困惑的解决方案。

col = 3
row = 3
A = [[0 for column in range(col)] for row in range(row)]

为什么你可以在 for 循环旁边放一个数字,python 会知道在其中重复该值?如果我这样做:

0 for column in range(col) 

在列表之外它作为一个错误出现。这是为什么呢?

另外,在这里添加一个 for 循环是如何工作的?我以为for循环格式是这样的:

for value in Something:
     #Repeating code

为什么解决方案不遵循这种 for 循环格式?如果我在列表之外执行了不是这种格式的 for 循环,则会出现错误。

【问题讨论】:

标签: python arrays python-3.x loops for-loop


【解决方案1】:

0 for column in range(col) 出现错误的原因是因为此功能被称为列表理解,它缺少 []“listness”:-)

你需要的是:

[0 for column in range(col)]

基本思想是[value for <some iteration function>] 会为您提供value 项目的列表,与迭代函数的迭代次数一样多。

for 在这里工作的原因是因为它可以以多种方式使用,就像在 forwhile 循环或 if 中使用 break 一样在列表推导中也是如此:

>>> [x for x in range(20)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

>>> [x for x in range(20) if x % 3 == 2]
[2, 5, 8, 11, 14, 17]

>>> [x if x % 2 == 0 else -x * 100 for x in range(10)]
[0, -100, 2, -300, 4, -500, 6, -700, 8, -900]

【讨论】:

  • 哦,我明白了,所以这只是使用列表的一个独特特征。这适用于除 for 循环以外的其他东西吗?
  • @CKA,你需要一些迭代次数有限的东西,老实说,我从来没有考虑过太多。鉴于它打算与某种可迭代对象一起使用,我怀疑for 是唯一的方法,尽管我不排除 Python 一些我还不知道的黑暗角落的可能性 :-) 我已经添加一些代码表明您可以使用 extra 东西,例如 if 过滤器。
  • 哇,这真的很有趣,非常感谢。也只是好奇,如果你可以使用 IF 语句,你也可以使用 ELSE 语句吗?我在 PyCharm 中尝试过,似乎不可能
  • @CKA:你确实可以使用else,这只是重新排序的问题(把for放在最后)。查看我的最新更新。
  • 哇,绝对让我大吃一惊。再次感谢!
猜你喜欢
  • 2020-03-21
  • 2016-06-15
  • 2016-11-06
  • 1970-01-01
  • 2018-10-05
  • 2017-10-24
  • 1970-01-01
  • 2021-11-25
  • 2013-12-13
相关资源
最近更新 更多