Я прошу прощения, если в этом посте есть неправильная терминология, я относительно новичок в python и пробую что-то из своей рулевой рубки.
Я пытаюсь создать программу, которая добавит значение к значениям во вложенном списке.
см. вложенный список ниже.
List = [ nan, 4, 5, nan, nan, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 5, nan, nan, nan, nan]
Я хотел бы, чтобы программа начиналась со второго списка и заканчивалась перед последним списком в последовательности, а также пропускала первое и последнее значения в списках со второго по пятый. По сути, только добавление значений в места, где находятся 2 и 3.
Решение должно выглядеть так:
List = [ nan, 4, 5, nan, nan, nan, nan],
[ nan, 4, 3, 4, 5, nan, nan],
[ nan, 4, 3, 4, 5, nan, nan],
[ nan, 4, 3, 4, 5, nan, nan],
[ nan, 4, 3, 4, 5, nan, nan],
[ nan, 4, 5, nan, nan, nan, nan]
Я попытался решить эту проблему следующим образом: во-первых, чтобы создать граничное условие диапазона цикла for, в рамках которого программа будет выполнять итерацию, поскольку списки начинаются с 0 и заканчиваются на -1, я мог бы добавить диапазон (1, -2) и это затем исключило бы первый и последний из вложенных списков из списка. Затем вложенный цикл for, который с помощью перечисления будет перебирать значения в пределах интересующего меня диапазона отдельного вложенного списка, 2 и 3 места.
for index in range (1,-1):
for index, item in enumerate(List, start = 1):
if item > 1:
List[index] = round((List[index]+1),3)
print(List)
Функция перечисления имеет функцию запуска, поэтому, если я установлю для оператора «если» значение больше 1, он пропустит значения nan и начнет с 2. Я не уверен, как заставить программу остановиться до 5. Прямо сейчас программа работает но ни одна цифра не меняется.
Любая помощь будет оценена по достоинству.
Спасибо.
Обновлено: Я обновил свой example_list и код ниже:
example_list = [[ 0, 4, 5, 0, 0, 0, 0],
[ 0, 4, 2, 3, 5, 0, 0],
[ 0, 4, 2, 3, 5, 0, 0],
[ 0, 4, 2, 3, 5, 0, 0],
[ 0, 4, 2, 3, 5, 0, 0],
[ 0, 4, 5, 0, 0, 0, 0]]
x = 1
for i, sub_list in enumerate(example_list[1:-1],start=1):
for j, entry in enumerate(sub_list[1:-1][1:-1], start=2):
if j > 1:
example_list[j] = round((example_list[j]+ x),3)
example_list[i][j] += 1
print(example_list)
Я сталкиваюсь с ошибкой типа: могу только объединить список (не «int») в список ошибок.
Есть несколько проблем как с вашим подходом, так и с вашим текущим кодом:
IndentationError
. Если вам нужен вложенный список, вам нужно вложить квадратные скобки, например:inputs = [
[1, 2, 3],
[4, 5, 6]
]
nan
не существует в Python, вы имеете в виду numpy.nan
?
range(1, -1)
вероятно не делает то, что вы думаете. Попробуйте распечатать промежуточные значения, такие как индексы, чтобы понять, что делает ваш код. Кроме того, попробуйте начать с наименьших возможных входных данных, чтобы их было легче отслеживать.
Дайте описательные имена вашим переменным, чтобы уменьшить путаницу. В частности, не используйте их типы в качестве имен (например, List
). Если это действительно абстрактный список чисел, вы можете назвать его numbers
, хотя предпочтительнее что-то более осмысленное.
Ваш вопрос не совсем правильно сформулирован, как уже указывалось, но вот несколько идей о том, как решить вашу проблему:
Если у вас есть вложенный список как
example_list = [[ nan, 4, 5, nan, nan, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 2, 3, 5, nan, nan],
[ nan, 4, 5, nan, nan, nan, nan]
]
то вы можете использовать следующий фрагмент для
начинать со второго списка и заканчивать перед последним списком в последовательности, а также пропускать первое и последнее значения в списках со второго по пятый
for i, sub_list in enumerate(example_list[1:-1],start=1):
for j, entry in enumerate(sub_list[1:-1],start=1):
# Perform an operation with that value, e.g. add 1
example_list[i][j] += 1
По сути, только добавление значений в места, где находятся 2 и 3.
Что касается 2 и 3 в вашем списке, они находятся только в столбцах 2 и 3, поэтому вы можете использовать следующий фрагмент кода:
for i, sub_list in enumerate(example_list[1:-1], start=1):
for j, entry in enumerate(sub_list[2:4], start=2):
# Perform an operation with that value, e.g. add 1
example_list[i][j] += 1
Надеюсь, это поможет!
Очень тяжело читать код в комментариях. Возможно, вы можете отредактировать свой исходный вопрос и опубликовать точный пример сценария, с которым у вас есть проблемы, чтобы его было легче читать и чтобы другие могли попытаться запустить ваш фрагмент кода на своих локальных компьютерах. Если у вас есть вложенный список, как в моем фрагменте кода, проблема в том, что List[index] сам по себе является списком. Вам нужно получить к нему доступ с помощью List[index1][index2], чтобы получить запись в index2 в подсписке index1.
мои извинения за плохое объяснение моей проблемы. Я пытаюсь добавить свой раздел кода, выполняющий операцию в цикле [j] for. добавление этого раздела кода Additional_Value = 1, если j > 1: example_list[j] = round((example_list[j]+ Additional_Value),3). Я получаю TypeError: можно только объединить список (не «int») в список. что я никогда не видел раньше. Это то, с чем вы сталкивались в прошлом и хотели бы помочь мне сориентироваться? Спасибо за ваше время.