2016-01-22 190 views
-3

假設我有兩個列表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

回答

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

更多Python的方式:

Q2 = list(zip(v, n)) 
0

您應該閱讀有關python ind entation。

另請注意:由range()生成的最後一個整數達到但不包括您指定的值。 你不需要 '-1'

這縮進代碼的工作:

for i in range(len(n)): 
    Q2[i] = (v[i],n[i]) 
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) 
0

Python的工作在塊的理念,使for循環的下一行應要麼四個空格縮進或標籤(或任何你已經設置了)

for x in a_list: 
    print(x)