1

我有以下列表:

Filedata:
[1, 0, 0, 0]
[2, 0, 0, 100]
[3, 0, 0, 200]
[4, 100, 0, 0]
[5, 100, 0, 100]
[6, 100, 0, 200]
...

其中第一列是 ID,第二列是 X 坐标,第三列是 Y 坐标,第四列是 Z 坐标。

我想在原始列表中制作两个不同 X 和 Y 坐标的列表:

X:
[0, 100, ...]
Y:
[0, 100, ...]

为此,我想到了一个代码,但在此过程中,我意识到必须有一个更简单的原因,而不是执行多个 for 和 if 循环。有任何想法吗?

4

3 回答 3

4
IDs,Xs,Ys,Zs = zip(*filedata)
positions = zip(Xs,Ys,Zs) # list of tuples of (x,y,z) 

unique_Xs = []
[unique_Xs.append(val) for val in Xs if val not in unique_Xs]

unique_Ys = []
[unique_Ys.append(val) for val in Ys if val not in unique_Ys]

我认为可行,假设 filedata 是一个二维列表,虽然 filedata 不是一个很好的变量名......

我添加了一种在每个列表中获取唯一点的方法......虽然不完全确定这就是你想要的

于 2013-04-24T16:51:15.080 回答
2
filedata = [
    [1, 0, 0, 0],
    [2, 0, 0, 100],
    [3, 0, 0, 200],
    [4, 100, 0, 0],
    [5, 100, 0, 100],
    [6, 100, 0, 200],
]

IDs, Xs, Ys, Zs = zip(*filedata)
Xs, Ys, Zs = set(Xs), set(Ys), set(Zs)
print 'X:', Xs
print 'Y:', Ys
print 'Z:', Zs
于 2013-04-24T16:58:44.350 回答
0

似乎 OP 只想要 X 和 Y 的列表。他可以做这样的事情:

xs=zip(*filedata)[1]
ys=zip(*filedata)[2]
于 2013-04-24T17:00:48.877 回答