Изменить индекс двух списков Python одновременно - PullRequest
0 голосов
/ 11 сентября 2018

Я использую Python 3, и у меня есть два списка, которые связаны своими индексами, но имеют отдельные значения.

scans = [400,405]
points = [101,201]

Так, например, сканирование 400 имеет 101 точку, а сканирование 405 имеет 201 точку.

Я пытаюсь создать набор имен файлов (то есть строк) для каждого сканированияэто выглядит так:

2idd_flyXMAP_0400_0.nc
2idd_flyXMAP_0400_1.nc
2idd_flyXMAP_0400_2.nc
...
2idd_flyXMAP_0400_98.nc
2idd_flyXMAP_0400_99.nc
2idd_flyXMAP_0400_100.nc

и

2idd_flyXMAP_0405_0.nc
2idd_flyXMAP_0405_1.nc
2idd_flyXMAP_0405_2.nc
...
2idd_flyXMAP_0405_199.nc
2idd_flyXMAP_0405_200.nc

Сканирование 405 уведомлений будет иметь больше файлов, связанных с ним.я подошел к следующему коду, но природа вложенного цикла for заставляет меня повторять слишком много раз и генерировать нежелательные строки (т. е. набор для сканирования 400, содержащий 200 точек, и набор для сканирования 405, содержащий 100 точек, обане нужны).

scans = [400,405]
points = [101,201]

for scan in scans:
    pre_f = '2idd_flyXMAP_0' + str(scan) + '_'
    for point in points:
      endfile = list(range(point))  #this seems to be where the problem is; i generate four sets of lists here because i have two elements in two lists
      for point in endfile:
          f = pre_f  + str(point) + '.nc'
          print(f)

Возможно, я настраиваю это неточно, но в этом случае я бы хотел изменить индекс как цикла scan for, так и первого pointцикл for один раз, когда первый point цикл завершается.Я не уверен, как это сделать, но я думаю, что это должно решить мою проблему.

Конечно, я открыт для отдельных, более простых подходов и заранее благодарю за вашу помощь!

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

Вы можете использовать zip :

for point, scan in zip(points, scans):
   for p in range(point):
      print("2idd_flyXMAP_0{a}_{b}.nc".format(a=scan, b=p))
0 голосов
/ 11 сентября 2018

Вы также можете использовать перечислять

for index, scan in enumerate(scans)
    for point in range(points[index])
        output = "{i}: {s}-{p}".format(i=index, s=scan, p=point)
        print(output)
0 голосов
/ 11 сентября 2018

Вы можете использовать zip :

scans = [400, 405]
points = [5, 6]

for scan, point in zip(scans, points):
    pre_f = '2idd_flyXMAP_0' + str(scan) + '_'
    for p in range(point):
        f = pre_f + str(p) + '.nc'
        print(f)

Мощно

2idd_flyXMAP_0400_0.nc
2idd_flyXMAP_0400_1.nc
2idd_flyXMAP_0400_2.nc
2idd_flyXMAP_0400_3.nc
2idd_flyXMAP_0400_4.nc
2idd_flyXMAP_0405_0.nc
2idd_flyXMAP_0405_1.nc
2idd_flyXMAP_0405_2.nc
2idd_flyXMAP_0405_3.nc
2idd_flyXMAP_0405_4.nc
2idd_flyXMAP_0405_5.nc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...