Изменить индекс двух списков Python одновременно

1

Я использую 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 будет иметь больше файлов, связанных с ним. я был близок к следующему коду, но характер цикла вложенного цикла меня много раз повторял и генерировал нежелательные строки (т.е. набор для сканирования 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 и первой point цикла после завершения первой point цикла. Я не уверен, как это сделать, но я думаю, что это должно решить мою проблему.

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

Теги:
indexing

3 ответа

0
Лучший ответ

Вы можете использовать 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))
1

Вы можете использовать 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
1

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

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню