создание списка списков для заданного числа итераций в Python

#python-3.x #list #iteration

Вопрос:

Я работаю над приведенным ниже фрагментом кода, в котором у меня есть список дат (date_index) и другой список (date_unique) с каждой уникальной датой, которая встречается в (date_index). Я пытаюсь заставить код возвращать индекс каждого вхождения i из date_unique в date_index.

 for i in date_unique:
        month_index = [i for i in range(len(date_index)) if date_index[i] == (date_unique[0])]
        print(month_index) 
 

например, приведенный выше код для элемента 0 в date_unique возвращает выходные данные:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
 

Если я изменю код на date_unique[1] Я получаю результат

 [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45]
 

который также повторяется 11 раз (в соответствии с количеством элементов в date_unique.
Результат, который я хочу получить, это:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45],
continued for i in date_unique.
 

если вам требуется ввод данных для тестирования

 month_index = ['032020', '032020', '032020', '032020', '032020', '032020', '032020', '032020', '032020', '032020', '032020', '032020', '032020', '032020', '032020', '032020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '042020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '052020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '062020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '072020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '082020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '092020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '102020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '112020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '122020', '012021', '012021', '012021', '012021', '012021', '012021', '012021', '012021', '012021', '012021']

date_unique = ['032020', '042020', '052020', '062020', '072020', '082020', '092020', '102020', '112020', '122020', '012021']
 

Надеюсь, мой вопрос ясен!
большое спасибо

Ответ №1:

Вместо этого вам следует выполнить итерацию date_unique и добавить сгенерированные списки в основной список.

 all_indices = []
for j in date_unique:
        month_index = [i for i in range(len(date_index)) if date_index[i] == (date_unique[j])]
        all_indices.append(month_index)
 

Немного более короткий путь был бы

 all_indices = []
for date in date_unique:
        all_indices.append([i for i in range(len(date_index)) if date_index[i] == date])
 

Комментарии:

1. Спасибо тебе, Дипак! Это решило проблему, я ценю вашу помощь!