我有一个元组列表(在这种情况下是纬度和经度的坐标)
[(51.69768233153901, -5.039923897568534),
(52.14847612092221, 0.33689512047881015),
(52.14847612092221, 0.33689512047881015),
....]
我试图将它们分成两个单独的列表(一个用于纬度,一个用于经度)
我无法弄清楚如何循环将它们添加到列表中,到目前为止我已经:
lat = latlon_df.at[0,'LatLon'][0]
lon = latlon_df.at[0,'LatLon'][1]
标识每个中的第一个。有人可以告诉我如何创建2个新列表吗?
感谢您的帮助!
答案 0 :(得分:7)
试试这个:
coords = [(51.69768233153901, -5.039923897568534),
(52.14847612092221, 0.33689512047881015),
(52.14847612092221, 0.33689512047881015)]
lat, lon = map(list, zip(*coords))
答案 1 :(得分:0)
如果我列出具有列表理解的元组列表,如:
In [131]: ll = [(i,j) for i,j in zip(range(10),range(5,15))]
In [132]: ll
Out[132]:
[(0, 5),
(1, 6),
(2, 7),
(3, 8),
(4, 9),
(5, 10),
(6, 11),
(7, 12),
(8, 13),
(9, 14)]
我可以轻松地将其拆分为2个列表,其中包含2个列表推导:
In [133]: [i[0] for i in ll], [i[1] for i in ll]
Out[133]: ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
是的,它涉及两次循环ll
,但是如果试图找到一种只做一次循环的方法,我就会多次循环它。有时简单直接的方法更好。
话虽如此,有transpose
的列表版本可以完成工作
In [134]: list(zip(*ll))
Out[134]: [(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), (5, 6, 7, 8, 9, 10, 11, 12, 13, 14)]
这给出了一个包含2个元组的列表,每个元组都有一个'列'原来的。我的原始构造函数可以简化为
list(zip(range(10),range(5,15)))
所以list(zip(*...
来回翻转列表。
但是:
lat = latlon_df.at[0,'LatLon'][0]
建议元组列表实际上可能是pandas
数据帧。 pandas
可能有自己的索引工具。您之前在数据框术语中询问过这个问题
Removing round brackets from a dataframe of lat/lon pairs
如果列表实际上是结构化数组:
In [143]: arr=np.array(ll, dtype='i,i')
打印显示看起来很像元组列表(虽然遗漏了一些),
In [144]: print(arr)
[(0, 5) (1, 6) (2, 7) (3, 8) (4, 9) (5, 10) (6, 11) (7, 12) (8, 13) (9, 14)]
In [145]: arr
Out[145]:
array([(0, 5), (1, 6), (2, 7), (3, 8), (4, 9), (5, 10), (6, 11), (7, 12),
(8, 13), (9, 14)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
很容易选择字段&#39;按名称:
In [146]: arr['f0']
Out[146]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int32)
In [147]: arr['f1']
Out[147]: array([ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], dtype=int32)
答案 2 :(得分:-1)