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を使用してみました。これはどのように達成できますか?みんな(または女の子)に感謝します。

編集

これらの場合、一度に1つしか印刷されないことを認識していますが、実際の例では、([x、y、x]、[x、y、z])が返される場合があります。

4

2 に答える 2

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]
于 2013-03-28T13:30:53.907 に答える
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)

ちなみに、リスト内の丸括弧は冗長だったので削除しました。

于 2013-03-28T13:41:35.000 に答える