我正在处理一个应用程序,该应用程序从各种数据源获取x和y坐标列表。 根据我需要访问的数据源(不在我的控制范围内),有多种方式可以返回数据。
使用isinstance和len / shape我知道我可以用switch语句解决这个问题。我想知道是否有更好的方法将这些转换为一致的格式,或者以一致的方式阅读这些格式。
答案 0 :(得分:1)
没有办法同样对待这些结构(它们不是所有的鸭子) 但是,将其转换为一致的格式相当容易,可以选择并转换为该格式,例如
zip(*[[x1,x2,x3...],[y1,y2,y3...]]) == [(x1,y1),(x2,y2),(x3,y3)...]
zip(*[[x1,y1],[x2,y2],[x3,y3]...]) == [(x1,x2,x3...),(y1,y2,y3...)]
list({x1:x2, x2:y2, x3:y3, ...}.items()) == [(x1,y1),(x2,y2),(x3,y3)...]
dict([(x1,y1),(x2,y2),(x3,y3)...]) = {x1:x2, x2:y2, x3:y3, ...}
Numpy数组在很大程度上可以与Python列表相同。
答案 1 :(得分:0)
添加到achampion's
次转化:
您可以从对列表中构建字典:
dict([[x1,y1],[x2,y2],...]) == {x1:x2, x2:y2, x3:y3, ...}
np.asarray
可以将列表转换为数组,并愉快地传递一个未更改的数组。 numpy
函数通常通过asarray
(或变体)传递输入,以确保输入是已知维度的数组。
数组转置相当于该列表zip(*...)
。
np.asarray([[[x1,x2,x3...],[y1,y2,y3...]]) == np.asarray([(x1,y1),(x2,y2),(x3,y3)...]).T
我不认为你可以在没有中间名单的情况下从字典到数组。但是(n,2)
数组与作为dict()
输入的对列表一样有用。
因此将一种布局转换为另一种布局很容易,但我不认为有一种功能可以用于所有布局。
这些布局中的任何一个是否更便于进一步处理?
伪代码可能是:
if x is a dictioary:
x = convert_to_list(x)
x = asarray(x)
if x.shape[0]==2 and x.shape[1]>2:
x = x.T
# [[1,2],[3,4]] is ambiguous