列表理解原因"名称...未定义"错误

时间:2015-06-06 02:52:06

标签: python list list-comprehension

我有一个名为public MyPresenter(IView view) { _view = view; _view.DoSomething = OnDoSomething; _foo = new ClassWithAwaitableMethods(); } 的整数列表:

x

我现在想要创建一个名为x = [3, 4, 5] 的新整数列表,其中有y多个x[0]的序列,后跟0's多个{ {1}},然后是x[1]多个1's等等......

在这个例子中,这将给出:

x[2]

我的尝试如下:

2's

但这给了我错误:

y = [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2]

我做错了什么,我怎么能用列表理解来做到这一点?

2 个答案:

答案 0 :(得分:4)

您的订购错误

>>> x = [3,4,5]
>>> [i for (i,k) in enumerate(x) for j in range(k)]
[0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2]

请参阅此docs专栏

  

列表推导由包含表达式的括号组成   后跟一个for子句,然后是零或多个for或if子句。

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] 
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

答案 1 :(得分:2)

有助于考虑扩展到常规for循环的内容:

r = []
for (i,k) in enumerate(x):
    for j in range(k):
        r.append(i)    

然后列表理解变为:

[i for (i,k) in enumerate(x) for j in range(k)]

并保持相同的顺序。