在for循环中创建新列表
问题描述:
假设我有两个列表v
和n
创建如图所示,我需要创建一个新列表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循环中创建一个新的列表?
答
问题是,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)
*期望一个缩进块* - 学习编写一个for循环,它需要缩进https://wiki.python.org/moin/ForLoop –
使用'Q2 = zip(v,n)' – gtlambert
有一些循环的基本思想! – Gammer