Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不同长度的两列中迭代每个元素_Python_Python 3.x_Google Maps Api 3_Google Distancematrix Api - Fatal编程技术网

Python 如何在不同长度的两列中迭代每个元素

Python 如何在不同长度的两列中迭代每个元素,python,python-3.x,google-maps-api-3,google-distancematrix-api,Python,Python 3.x,Google Maps Api 3,Google Distancematrix Api,我在一个CSV文件中有两列,我想用Python做一个循环,这样我可以将一个列表中的每个元素匹配到另一个列表中。我这样做是为了从GoogleMaps API创建一个包含多个行程的文件。所以我实际上想做的是,为两个列表中的每个元素映射从起点列表到目的地列表的距离 是这样的: origins = ['a', 'b', 'c', 'd'] destinations = ['E', 'F', 'G'] Distances_from = ['aE', 'aF', 'aG', 'bE', 'bF', 'bG

我在一个CSV文件中有两列,我想用Python做一个循环,这样我可以将一个列表中的每个元素匹配到另一个列表中。我这样做是为了从GoogleMaps API创建一个包含多个行程的文件。所以我实际上想做的是,为两个列表中的每个元素映射从起点列表到目的地列表的距离

是这样的:

origins = ['a', 'b', 'c', 'd']
destinations = ['E', 'F', 'G']
Distances_from = ['aE', 'aF', 'aG', 'bE', 'bF', 'bG', 'cE', 'cF', 'cG', 'dE', 'dF', 'dG']
我想要这样的输出:

origins = ['a', 'b', 'c', 'd']
destinations = ['E', 'F', 'G']
Distances_from = ['aE', 'aF', 'aG', 'bE', 'bF', 'bG', 'cE', 'cF', 'cG', 'dE', 'dF', 'dG']
我的代码是:

destination_index=0 #city code
destination_coordinates=10
origin_index=12
origin_coordinates=13

reader=csv.reader(municipalities)
writer=csv.writer(output)

try:
    for row in list(reader)[1:]:
         destination_c=row[destination_coordinates]
         origin_c=row[origin_coordinates]

         destination_name=row[destination_index]
         origin_name=row[origin_index]

     for destination_coordinates, origin_coordinates in zip(destination_c, origin_c):
         distances = gmaps.distance_matrix(origin_c, destination_c) 

         if distances['rows'][0]['elements'][0]['status'] == "OK": 
            writer.writerow((destination_name,origin_name,
                                 distances['rows'][0]['elements'][0]['distance']['value'], 
                                 distances['rows'][0]['elements'][0]['duration']['value']))          
         else:
            writer.writerow((destination_name,origin_name,
                             ".", 
                             "."))         
finally:
    municipalities.close()
    output.close()

一份清单可以:

origins=['a','b','c','d']
destinations=['E','F','G']

Distances_from = ["{}{}".format(x,y) for x in origins for y in destinations]
print(Distances_from)
# ['aE', 'aF', 'aG', 'bE', 'bF', 'bG', 'cE', 'cF', 'cG', 'dE', 'dF', 'dG']

显然,您需要更改您想要执行的操作(可能不是
“{}{}”.format(x,y)
)。

它是否像嵌套for循环一样简单,您正在搜索:

for origin in origins:
    for destination in destinations:
        distance(origin, destination)
        ... 
要以更简洁的方式编写,您可以:

from functools import product
for origin, destination in product(origins, destinations):
    distance(origin, destination)
或使用列表理解:

distances = [distance(origin, destination) 
                      for origin in origins 
                      for destination in destinations]

我想我几乎解决了它,我一直有一些问题,但我认为这是因为谷歌的API,而不是代码。 这是我使用的代码

@詹哈克

dest_f=open(os.path.join(dir,'Colombian_Municipalities.csv'),'r')
orig_f=open(os.path.join(dir,'Origins.csv'),'r')
output_f=open(os.path.join(dir,'Distances_to_Bogota.csv'),'w')

# Constants
dest_code_index=0 # detination city code
dest_coord_index=10 # Coordinates from all municipalities in Colombia
orig_code_index=0 #
orig_coord_index=1 # Coordinates from markets and seaports



dest_reader=csv.reader(dest_f)
orig_reader=csv.reader(orig_f)
output_writer=csv.writer(output_f)
output_header=['Origin','Destination','Distance (meters)','Duration (seconds)']
output_writer.writerow(output_header)


orig_reader_list=list(orig_reader)
dest_reader_list=list(dest_reader)        


try:

for dest_row in dest_reader_list[1:]:

    dest_code=dest_row[dest_code_index]
    dest_coord=dest_row[dest_coord_index]


    for orig_row in orig_reader_list[1:]:

        orig_code=orig_row[orig_code_index]
        orig_coord=orig_row[orig_coord_index]

        print(orig_code,dest_code)

        distances=gmaps.distance_matrix(orig_coord, dest_coord) 

        if distances['rows'][0]['elements'][0]['status']=="OK": 
            output_writer.writerow((dest_code,orig_code,
                                 distances['rows'][0]['elements'][0]['distance']['value'], 
                                 distances['rows'][0]['elements'][0]['duration']['value']))             
        else:
            output_writer.writerow((dest_code,orig_code,
                             ".", 
                             "."))         

finally:
dest_f.close()
orig_f.close()
output_f.close()

a、b、…、E、F、G到底是什么?串?如果是,请使用一些引号。到目前为止,您尝试了什么?通过点击
edit
链接添加您的代码以及对问题正文中所有内容的解释。谢谢,我上传了我的代码,您可以尝试看看我能做些什么来修复它吗?您希望此代码做些什么,目前输出的是什么?你可以发布一个csv的链接吗。给你带来麻烦的文件?谢谢,我上传了我的代码,你能试试看我能做些什么来修复它吗?谢谢,我上传了我的代码,你能试试看我能做些什么来修复它吗?