Отредактировано:
Общая проблема: Используя элементы некоторого списка длиной m * n, создайте список с m подсписками, каждый из которых имеет длину n.
В моем случае m> n и 10 и 3 соответственно.
Окончательный результат должен быть списком ("lis1"), содержащим десять списков (итерации "nulis") с тремя элементами в каждом. Кроме того, мой текущий алгоритм должен оставить «lis0» пустым. Ошибка возвращается прямо на последнем шаге.
Я анализирую некоторые CSV
файлы (четыре столбца - один со списком из 3 чисел, три с одним номером каждый о соответствующих списках), которые я сгенерировал с помощью модуля CSV. Я не мог понять, как сделать это более элегантно, читая документацию к модулю, и у меня возникли некоторые проблемы с последним шагом: объединение терминов в столбцах списка в списки длиной 3 элемента (остальные столбцы сделаны).
Решение / объяснение было бы идеальным, но я воспользуюсь альтернативным подходом, если он у вас есть.
Я не могу вспомнить некоторые другие, но я пытался использовать "for j in list: while (j == list[list.index(j)+1])
или (j == list[list.index(j)-1]): newlist.append(j)
", но получил ошибки памяти. Решение для этого было бы приятным, хотя и не столь уместным, потому что оно работало бы только для особого случая, в который я смотрю (тот, который работает из-за неадекватности в другом сценарии, который я писал).
В текущей версии я попытался «break
» (рано завершает шаг, но пропущена ошибка того же типа), «continue
» и «pass
», но безрезультатно.
отредактировал скрипт в функцию, которая выдает ту же ошибку, не стесняйтесь приводить специальный случай (т. Е. Любое решение описанной выше проблемы с m = 10, n = 3)
def lispart(lis,length,depth):
l0 = list(lis)
l1 = []
if ((len(l0)%length) != 0) or ((len(l0)%depth) != 0):
return "Parity Error: length and/or depth do not correspond to list"
else:
for i in range(int(len(l0)/depth)):
for j in range(depth):
nulis = [l0[j] for j in range(depth)]
l1.append(nulis)
for k in nulis:
if k in l0:
l0.remove(l0[l0.index(k)])
print(lispart([i for i in range(30)], 10, 3))
Я думаю, что проблема в том, что осталось недостаточно элементов для завершения создания новых списков.
В конечном итоге, когда вы запустите его, как я написал, последним непустым напечатанным оператором "lis0
" будет список только с одним числом, а именно последний элемент исходного списка (в котором, к сожалению, было тридцать элементов). В последнем отпечатке "lis1
" было 9 элементов, и следующий (последний "nulis") элемент был правильно сформулирован, но я не могу сказать, добавляется ли он, потому что возникает ошибка, прежде чем что-либо еще будет напечатано.
Traceback (most recent call last):
File "script.py", line X, in <module>
nulis = [lis0[j] for j in range(3)]
File "script.py", line X, in <listcomp>
nulis = [lis0[j] for j in range(3)]
IndexError: list index out of range
Любая помощь будет великолепна, ребята!