在for循环中创建新列表

问题描述:

假设我有两个列表vn创建如图所示,我需要创建一个新列表Q2,使得Q2[i] = (v[i] , n[i])在for循环中创建新列表

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: expected an indented block

我怎么会去在for循环中创建一个新的列表?

+1

*期望一个缩进块* - 学习编写一个for循环,它需要缩进https://wiki.python.org/moin/ForLoop –

+3

使用'Q2 = zip(v,n)' – gtlambert

+0

有一些循环的基本思想! – Gammer

问题是,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))] 

更多Python的方式:

Q2 = list(zip(v, n)) 

您应该阅读有关python ind entation。

另请注意:由range()生成的最后一个整数达到但不包括您指定的值。 你不需要 '-1'

这缩进代码的工作:

for i in range(len(n)): 
    Q2[i] = (v[i],n[i]) 

你的解决方法是关闭。使用嵌套迭代器生成项目

# 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) 

Python的工作在块的理念,使for循环的下一行应要么四个空格缩进或标签(或任何你已经设置了)

for x in a_list: 
    print(x)