我有一个名为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]
我做错了什么,我怎么能用列表理解来做到这一点?
答案 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)]
并保持相同的顺序。