在for循环中创建新列表

时间:2016-01-22 18:17:43

标签: python loops

假设我创建了两个列表vn,我需要创建一个新列表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循环中创建新列表?

4 个答案:

答案 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
    }
}