列表理解 - 双循环还是不循环?

时间:2016-06-27 13:29:40

标签: python

我遇到以下问题:

import java.util.*;

// our main class becomes a file but the main method is still found
public class HelloWorld
{
  public static void main(String[] args)
  {
    foo(createList()); // T must be Object
  }

  private static void foo(List<Object> objs) { }

  private static <T> List<T> createList() { return new ArrayList<>(); }
}

它们都返回:“int”对象不可迭代,这对我来说有点混乱。由于# Neither this trial1 = [[x for x in 10000 // 5**i] for i in range(1, 10)] # nor this trial2 = [x for i in range(1, 10) for x in 10000 // 5**i] # work. 是数组i,因此必须是(1,2,3,...,9)公式。那么整数10000 // 5**i哪个不能迭代?我希望i成为包含所有这些值的列表。

这有什么不同?

trial

如何制定列表理解陈述?

3 个答案:

答案 0 :(得分:2)

你的工作for循环的理解相当于:

[10000 // 5**i for i in range(1, 10)]

在该示例中没有双循环,因此理解中也不应该存在。

关于你的第二个问题; i 不是一个值为(0, 1, ... , 9)的列表,但它是该列表中的一个整数。

答案 1 :(得分:2)

相当于

trial = []
for i in range(1, k):
    trial.append(n // 5**i)

就是

trial = [10000 // 5**i for i in range(1, k)]

因为您只是在10000 // 5**i

中计算i range(1, k)

答案 2 :(得分:1)

for x in 10000 // 34**i或类似的东西意味着遍历数字,这没有意义并导致错误。

您似乎试图将数字附加到列表中,这很容易:

trial = [10000 // 5**i for i in range(1, 5)]

这里你基本上是在说:

  1. 创建一个列表([...]
  2. 由值组成,每个值等于10000//5**i
  3. i来自range(1, 5)
  4. 的每个号码