2013-05-03 39 views
1

我有元組的兩個元組的兩個元組創建列表:從元組

dCF3t=((((1.90683376789093, -44705.1875), (1.90689635276794, -44706.76171875)),),) 
dU1t=((((0.0, 0.76572), (0.00249999994412065, 0.00782267469912767)),),) 

我需要創建與每個元組的第二列的值的列表:

dFD=[] 
dFD.append([x[1] for x in dU1t, y[1] for y in dCF3t]) 

實施例:

dFD=[[0.76572,-44705.1875],[0.00782267469912767,-44706.76171875]] 

但它給我這個錯誤:name 'y' is not defined

P.S .:兩個元組都是從元組列表中創建的。

編輯: 爲了避免,),)在元組的結尾,請考慮:

dCF3t=[[((1.90683376789093, -44705.1875), (1.90689635276794, -44706.76171875))]] 
dU1t=[[((0.0, 0.76572), (0.00249999994412065, 0.00782267469912767))]] 

SOLUTION:

dFD=[] 
    for i in range(0, len(dU1t[0][0])): 
     dFD.append([dU1[0][0][i][1],dCF3[0][0][i][1]]) 
+1

這並不完全清楚,我是你正在嘗試做的。你能說一下你想要它在你的例子中返回嗎? – azgult 2013-05-03 00:25:10

+0

@azgult:完成!謝謝 – jpcgandre 2013-05-03 00:28:14

回答

1

我懷疑你想是這樣的:

dFD.append([x[1] for x in dU1t]+[y[1] for y in dCF3t]) 

雖然,您可能想要使用extend ra除非你想讓dFD在列表中包含一個列表,否則它不是append

1

這似乎匹配您的例子:

dFD = [[x[1], y[1]] for x,y in zip(dU1t[0], dCF3t[0])] 
3

我相信你正在尋找

dFD=[[x[1],y[1]] for x,y in zip(dU1t[0], dCF3t[0])] 

在一般情況下,你應該儘量避免附加的東西儘可能;它通常會減慢,因爲它可能需要將整個列表複製到內存中的新位置。在你的例子中,append語句本質上是微不足道的,所以它不會真的花費你很多,但它也是完全沒有必要的。

1

好吧,這裏還有幾個問題:

  1. 你「的元組的元組」實際上是元組的元組的元組的元組。分層是相當模糊的,但基本上元組的元組被封裝在兩層一元元組中。對於這篇文章的其餘部分,我將假設變量設置爲代替如下:

    dCF3t=(1.90683376789093, -44705.1875), (1.90689635276794, -44706.76171875) 
    dU1t=(0.0, 0.76572), (0.00249999994412065, 0.00782267469912767) 
    

    如果它無法產生他們以這種形式,嘗試獲得與

    dCF3t = dCF3t[0][0] 
    dU1t = dU1t[0][0] 
    
  2. 排除在外元組
  3. 您應該使用dFD.extend()而不是dFD.append()。 Extend添加傳遞給它的所有迭代元素,而append只是將它的參數添加到列表中。也就是說,沒有必要使用,因爲列表一開始是空的。你可以簡單地將它直接設置爲列表理解。

  4. 列表理解本身是實際發生錯誤的部分。問題在於你試圖在同一列表理解中迭代兩個不同的對象;你的目的蟒的zip方法是在這裏的理想:

    dFD = [(x[1], y[1]) for x, y in zip(dU1t, dCF3t)] 
    
+0

在我的例子中,我有'dCF3t =((((1.90683376789093,-44705.1875),(1.90689635276794,-44706.76171875)),),)',你的代碼給出了'IndexError:元組索引超出範圍'。我可以將'dCF3t'轉換爲'((((1.90683376789093,-44705.1875),(1.90689635276794,-44706.76171875))))''還是類似的? – jpcgandre 2013-05-03 01:02:40

+0

對不起,當我創建我的答案時,你的帖子有着稍微不同的變量。我現在糾正了它。不過,你的錯誤意味着你沒有在步驟1中更換。可以直接執行此操作,但步驟3中的代碼看起來略有不同:對於x,y in zip(dU1t [0] [0],dCF3t [0]),dFD = [(x [1],y [1] ] [0])]' – azgult 2013-05-03 09:57:56