假设我创建了两个列表v
和n
,我需要创建一个新列表Q2
,以便Q2[i] = (v[i] , n[i])
。
n = [x * 0.1 for x in range(0, 11)]
>>> n
[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
v = [((x**2)+ 2*x) for x in n]
>>> v
[0.0, 0.21, 0.44, 0.69, 0.96, 1.25, 1.56, 1.89, 2.24, 2.61, 3.0]
我尝试了列表理解,但它给了我一个包含所有单个元素的矩阵
Q2 = [(x,y) for x in v for y in n]
我一直在尝试在for循环中编写它,但似乎语法存在问题。
for i in range(len(n) -1):
Q2[i] = (v[i],n[i])
我使用上面的for循环得到的错误是
IndentationError:预期缩进块
我如何在for循环中创建新列表?
答案 0 :(得分:4)
问题是for / while循环中的行(或if / else / def / try /除此之外)需要缩进。你想要的是这个:
for i in range(len(n) -1):
Q2[i] = (v[i],n[i])
如果你真的想用循环来做这件事:
Q2 = []
for i in range(len(n)):
Q2.append((v[i], n[i]))
列表理解:
Q2 = [(v[i], n[i]) for i in range(len(n))]
更多pythonic方式:
Q2 = list(zip(v, n))
答案 1 :(得分:0)
您应该阅读有关python缩进的内容。
另请注意:range()生成的最后一个整数最多但不包括您指定的值。 你不需要'-1'
此缩进代码有效:
for i in range(len(n)):
Q2[i] = (v[i],n[i])
答案 2 :(得分:0)
你的解决方案很接近。使用嵌套迭代器生成项
# making the list in multiple steps
n = [x * 0.1 for x in range(0, 11)]
v = [((x**2)+ 2*x) for x in n]
q2 = list(zip(n,v))
print('want', q2)
# making the list in one step
q2 = [(y, (y**2)+2*y) for y in ((x*0.1) for x in range(11))]
print('got', q2)
答案 3 :(得分:0)
Python处理块的思想,因此for循环的下一行应该缩进四个空格或标签(或者你设置的任何东西)
cellMap = new CellEntity[width][length];
for(int i = 0; i < width; i++){
for(int j = 0; j < length; j++){
cellMap[i][j] = new CellEntity(); //do constructor-y stuff here
}
}