Python 从字符串列表在列表中创建多个列表
我正在尝试以以下格式构建列表列表:Python 从字符串列表在列表中创建多个列表,python,python-3.x,Python,Python 3.x,我正在尝试以以下格式构建列表列表: coordinates = [[38.768, -9.09], [[41.3092, -6.2762],[42.3092, -6.3762], [41.4092, -6.3762] ...]] 我有两个字符串列表,其中包含我想要组合的纬度和经度值(它们是对称的): 我正在使用多个循环来构建我的数据,现在我不是很有信心。我相信有更好的办法。你会怎么做?谢谢大家! 我尝试测试的多个循环无效,但如下所示: latitude = [] longitu
coordinates = [[38.768, -9.09], [[41.3092, -6.2762],[42.3092, -6.3762], [41.4092, -6.3762] ...]]
我有两个字符串列表,其中包含我想要组合的纬度和经度值(它们是对称的):
我正在使用多个循环来构建我的数据,现在我不是很有信心。我相信有更好的办法。你会怎么做?谢谢大家!
我尝试测试的多个循环无效,但如下所示:
latitude = []
longitude = []
processes = dict
for lat in data['latitude']:
latitude.append(lat.split(','))
for lon in data['longitude']:
longitude.append(lon.split(','))
print(latitude)
coordinates = []
for i in range(len(latitude)):
# print("Coordinate number: %d" % i)
for x in range(len(latitude[i])):
processes[i] = processes[i] + 'teste'
# years_dict[line[0]].append(line[1])
有一个名为
zip
的内置函数,它将以递增的索引值连接两个列表,您可以对其进行迭代,然后将其分配给列表:
coordinates = []
zippedList = zip(map(lambda x: float(x), latitude), map(lambda x: float(x), longitude))
for [a,b] in zippedList:
coordinates.append([a, b])
有一个名为
zip
的内置函数,它将以递增的索引值连接两个列表,您可以对其进行迭代,然后将其分配给列表:
coordinates = []
zippedList = zip(map(lambda x: float(x), latitude), map(lambda x: float(x), longitude))
for [a,b] in zippedList:
coordinates.append([a, b])
你可以用这样的东西。用逗号分割列表中的字符串,然后在列表上迭代
latitude = ['38.768004,41.3092,41.3059,41.3025,41.2991,41.2957,41.2923,41.2888,41.2853,41.2818']
longitude = ['-9.096851,-6.2762,-6.2285,-6.1809,-6.1332,-6.0856,-6.0379,-5.9903,-5.9427,-5.8951']
latitude = latitude[0].split(',')
longitude = longitude[0].split(',')
print [[round(float(latitude[i]), 2), round(float(longitude[i]), 2)] for i, val in enumerate(latitude)]
你可以用这样的东西。用逗号分割列表中的字符串,然后在列表上迭代
latitude = ['38.768004,41.3092,41.3059,41.3025,41.2991,41.2957,41.2923,41.2888,41.2853,41.2818']
longitude = ['-9.096851,-6.2762,-6.2285,-6.1809,-6.1332,-6.0856,-6.0379,-5.9903,-5.9427,-5.8951']
latitude = latitude[0].split(',')
longitude = longitude[0].split(',')
print [[round(float(latitude[i]), 2), round(float(longitude[i]), 2)] for i, val in enumerate(latitude)]
假设您有两个字符串列表,您可以使用
zip
、float
和列表理解在一行中完成:
coordinates = [(float(lat), float(lon)) for lat, lon in zip(latitude, longitude)]
另一方面,如果您的输入是带有逗号分隔值的单个字符串:
coordinates = [(float(lat), float(lon)) for lat, lon in zip(latitude[0].split(','), longitude[0].split(','))]
最后,如果您同时使用了这两种语言,则仍然可以使用一行,但会相当难以辨认。此处的for
循环更容易阅读,因为您必须解压缩各个子字符串:
coordinates = []
for lats, lons in zip(latitude, longitude):
coordinates.extend((float(lat), float(lon)) for lat, lon in zip(lats.split(','), lons.split(',')))
如果您感兴趣,以下是一行:
coordinates = [(float(lat), float(lon)) \
for lat, lon in zip(lats.split(','), lons.split(',')) \
for lats, lons in zip(latitude, longitude)]
此版本使用生成器表达式而不是列表。语法非常类似于列表理解,但不创建中间列表。使用list.extend将项目直接放入输出中
通常,对于
循环,列表理解要比相应的快得多,这是因为代码在引擎盖下的工作方式
另外,请注意,我将坐标对设置为元组,而不是嵌套列表。这只是我的建议。假设您有两个字符串列表,您可以使用zip
、float
和列表理解在一行中完成:
coordinates = [(float(lat), float(lon)) for lat, lon in zip(latitude, longitude)]
另一方面,如果您的输入是带有逗号分隔值的单个字符串:
coordinates = [(float(lat), float(lon)) for lat, lon in zip(latitude[0].split(','), longitude[0].split(','))]
最后,如果您同时使用了这两种语言,则仍然可以使用一行,但会相当难以辨认。此处的for
循环更容易阅读,因为您必须解压缩各个子字符串:
coordinates = []
for lats, lons in zip(latitude, longitude):
coordinates.extend((float(lat), float(lon)) for lat, lon in zip(lats.split(','), lons.split(',')))
如果您感兴趣,以下是一行:
coordinates = [(float(lat), float(lon)) \
for lat, lon in zip(lats.split(','), lons.split(',')) \
for lats, lons in zip(latitude, longitude)]
此版本使用生成器表达式而不是列表。语法非常类似于列表理解,但不创建中间列表。使用list.extend将项目直接放入输出中
通常,对于
循环,列表理解要比相应的快得多,这是因为代码在引擎盖下的工作方式
另外,请注意,我将坐标对设置为元组,而不是嵌套列表。这只是我的一个建议。你能给我们展示一些你尝试过的“多重循环”吗?你能编辑你的帖子使你的列表更短、更有效吗?有奇怪的引号。这不是有效的Python代码。请修理。@不是我附加的机器人code@AndreGarcia. 您确定输入的格式正确吗?它总是一个数字,然后是一个逗号分隔的字符串中的所有其他数字吗?你能给我们展示一些你尝试过的“多重循环”吗?你能编辑你的帖子使你的列表更短、更有效吗?有奇怪的引号。这不是有效的Python代码。请修理。@不是我附加的机器人code@AndreGarcia. 您确定输入的格式正确吗?在一个逗号分隔的字符串中,是否总是一个数字后跟所有其他数字?这不会将字符串转换为数字。我已经解决了这个问题。:)这不会将字符串转换为数字。我已修复此问题。:)不清楚OP的实际输入是什么,但是如果你的解释是正确的,那就好。不清楚OP的实际输入是什么,但是如果你的解释是正确的,那就好。