2013-03-26 66 views
0

我有正確返回xyz座標列表(或xyz座標列表)的代碼。我的問題是我想直接從它返回的列表中訪問單個數字,但我一次只能訪問整個列表。我的代碼:從字典切片數據

import numpy as np 
a = [([2, -2, 0.29]), ([-2, 0, 1.9]), ([2, 1, 2.35]), ([2, -3, 2.96])] 
b = [0,2,3] 
myZip= list(zip(a,b)) 
result={} 
for x in myZip: 
    result.setdefault(x[1],[]).append(x[0]) 
xyz=[] 
for each_index in b: 
    xyz.append(result[each_index]) 
    print(xyz) 
    xyz.clear() 

將返回:

[[[2, -2, 0.29]]] 
[[[-2, 0, 1.9]]] 
[[[2, 1, 2.35]]] 

我現在想這個分成X和Y,使X = [2,-2,2]和Y = [ - 2,0 ,1]。我試圖直接切片,但是我得到一個有關切片是整數而不是元組的錯誤。我也嘗試轉換爲numpy然後使用np.hsplit。這怎麼能實現?謝謝你們(或女孩)。

編輯

我認識到,在這些情況下,它只能打印一次一個,但在我的現實世界的例子,有次在那裏將返回([X,Y,X],[ X,Y,Z])。

回答

1

使用列表理解:

>>> X = [result[i][0][0] for i in b] 
>>> Y = [result[i][0][1] for i in b] 
>>> print X, Y 
[2, -2, 2] [-2, 0, 1] 
1

使用zip(*a)

>>> a = [[2, -2, 0.29], [-2, 0, 1.9], [2, 1, 2.35], [2, -3, 2.96]] 

>>> b = [0,2,3] 

>>> x, y, z = zip(*(a[i] for i in b)) 

>>> x 
(2, 2, 2) 

>>> y 
(-2, 1, -3) 

>>> z 
(0.29, 2.35, 2.96) 

順便說一句,你的列表裏面的圓括弧是多餘的,所以我把他們趕走。