【问题标题】:Converting list comprehension into a while loop将列表理解转换为 while 循环
【发布时间】:2016-12-24 17:26:01
【问题描述】:

我认为这是一个非常简单的问题,但我得到了错误的答案。我正在在线课程中做 python 编程练习,我试图将这段代码转换为循环。

x = [y for i in range(300)]

我的回答:

counter=0
while counter<300:
    x=y
    counter+=1

这两者有什么区别?
如何将第一个 sn-p 转换为第二个?

【问题讨论】:

  • x 需要是一个列表,并且在您的“翻译”中,它不是一个列表(此外,如果您正在使用列表,= 不是您想要的,而是append ),并且您只是用 y 覆盖 x。但是,您也从未将 y 声明为任何东西,因此这在语法上也是不正确的。这是您正在处理的确切代码吗?您的理解也是不正确的。
  • x = list(range(300)) 更好。但这已经大错特错了:x = [y for i in range(300)]
  • 另一个不让你满意的答案:x = [y] * 300。方法:将非常高效的代码转换为低效的循环 + 追加。仅用于教育目的。否则使用我的 sn-p。
  • i = 0; x = []; while i &lt; 300: (newline, indent) x.append(y) (newline, indent) i += 1.
  • @Prethia 我明白你的意思,但对于像int 这样的不可变类型来说并非如此。

标签: python loops list-comprehension


【解决方案1】:

列表推导的输出是list,而您还没有在代码中创建任何列表,所以当我们阅读类似于x = [y for i in range(300)] 的列表推导时,意味着x 是一个包含300 个元素的列表它存储y 变量的值。这可以写在while循环中:

x = []
counter = 0

y = 10  # Some value defined in your code.
while counter < 300:
    x.append(y)
    counter += 1

【讨论】:

  • 我用示例数据集尝试了您的代码,它给出了相同的结果,但系统不接受答案。您认为这是因为计算价值时两者之间的差异吗?还是第一个代码产生了不需要的不必要的东西?
猜你喜欢
  • 1970-01-01
  • 2021-07-30
  • 2020-03-29
  • 1970-01-01
  • 2021-09-02
相关资源
最近更新 更多