从字符串列表中创建列表中的多个列表

时间:2017-02-13 16:49:48

标签: python python-3.x

我试图按以下格式构建列表列表:

coordinates = [[38.768, -9.09], [[41.3092, -6.2762],[42.3092, -6.3762], [41.4092, -6.3762] ...]]

我有2个字符串列表,其中包含我想要组合的纬度和经度值(它们是对称的):

latitude = ['38.768004','41.3092,41.3059,41.3025']     
longitude = ['-9.096851','-6.2762,-6.2285,-6.1809]

我使用多个循环尝试构建我的数据,此时我并不十分自信。我相信这是一个更好的方法。你会怎么做?谢谢!

我试图测试的多个循环并不是无效的,但在这里:

    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])

3 个答案:

答案 0 :(得分:3)

假设您有两个字符串列表,您可以使用zipfloat和列表理解在单行中执行此操作:

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将项目直接放入输出中。

通常,列表推导比相应的for循环要快得多,因为代码的工作方式很糟糕。

另外,请注意我将坐标对设置为元组而不是嵌套列表。这只是我的推荐。

答案 1 :(得分:0)

有一个名为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])

答案 2 :(得分:0)

你可以使用这样的东西。用逗号分隔列表中的字符串,然后迭代列表。

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)]