【问题标题】:Python for loop one-line difference from regullarPython for循环与常规的一行区别
【发布时间】:2020-08-18 11:51:41
【问题描述】:

我只是想出了一行和常规 for 循环之间的区别。

举个例子;

obs = [6, 12, 8, 10, 20 16]
freq = [5, 4, 3, 2, 1, 5]
data = []


data.extend(obs[i:i+1] * freq[i] for i in range(len(obs)))

输出

[[6, 6, 6, 6, 6], [12, 12, 12, 12], [8, 8, 8], [10, 10], [20], [16, 16, 16, 16, 16]]

然而,

for i in range(len(obs)):
    data.extend(obs[i:i+1] * freq[i])

输出

[6, 6, 6, 6, 6, 12, 12, 12, 12, 8, 8, 8, 10, 10, 20, 16, 16, 16, 16, 16]

谁能解释一下是什么原因造成的?

【问题讨论】:

    标签: python-3.x list for-loop


    【解决方案1】:

    extending x by y 表示将 y 的每个条目附加到 x。

    由于obs[i:i+1] * freq[i] for i in range(len(obs)) 的条目是整数列表,data.extend(obs[i:i+1] * freq[i] for i in range(len(obs)))整数列表 附加到data,而不是整数。

    另一方面,obs[i:i+1] * freq[i] 的元素是整数,因此data.extend(obs[i:i+1] * freq[i]) 会将整数附加到data

    【讨论】:

      【解决方案2】:

      这将产生与单线相同的输出:

      obs = [6, 12, 8, 10, 20, 16]
      freq = [5, 4, 3, 2, 1, 5]
      data = []
      
      for i in range(len(obs)):
          data.extend([obs[i:i+1] * freq[i]])
      

      【讨论】:

      • 显式扩展只有一个值...如果只有一种方法:-P
      猜你喜欢
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 2020-12-24
      • 2011-07-19
      • 1970-01-01
      • 2015-02-25
      • 2019-05-09
      相关资源
      最近更新 更多