-1

У меня есть два столбца в CSV-файле, и я хочу создать цикл с Python, поэтому я могу сопоставить каждый элемент из одного списка в другой. Я делаю это, чтобы создать файл с несколькими маршрутами из API GoogleMaps. Так что я действительно хочу сделать, это расстояние карты от списка истоков до списка пунктов назначения, для каждого элемента в обоих списках.как перебирать каждый элемент в двух столбцах разной длины

Это что-то вроде этого:

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() 
+1

что именно 'а, Ь, ..., E, F, G'? Строки? Если да, используйте некоторые кавычки. что ты уже испробовал? –

+0

Добавьте свой код и объяснение того, что все это находится в теле вопроса, нажав на ссылку «edit». –

+0

спасибо, я загрузил свой код, вы можете попробовать и посмотреть, что я могу сделать, чтобы исправить это? –

ответ

0

список понимание будет делать:

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

+0

спасибо, я загрузил свой код, вы можете попробовать и посмотреть, что я могу сделать, чтобы исправить это? –

0

Является ли это так просто, как вложенные в цикле, вы ищете:

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] 
+1

... или использовать список ... – Jan

+0

спасибо, я загрузил свой код, вы можете попробовать и посмотреть, что я могу сделать, чтобы исправить это? –

0

Я думаю, что я почти решил это, у меня все проблемы, но я думаю, что это из-за Google A PI, а не код. Вот код, который я использовал.

@JanHak

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