Использование циклов for и перечисления для управления значениями во вложенных списках

Я прошу прощения, если в этом посте есть неправильная терминология, я относительно новичок в 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») в список ошибок.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Есть несколько проблем как с вашим подходом, так и с вашим текущим кодом:

  1. Синтаксис того, как вы определяете свои входные данные, недействителен и выдает IndentationError. Если вам нужен вложенный список, вам нужно вложить квадратные скобки, например:
inputs = [
    [1, 2, 3],
    [4, 5, 6]
]
  1. nan не существует в Python, вы имеете в виду numpy.nan?

  2. range(1, -1) вероятно не делает то, что вы думаете. Попробуйте распечатать промежуточные значения, такие как индексы, чтобы понять, что делает ваш код. Кроме того, попробуйте начать с наименьших возможных входных данных, чтобы их было легче отслеживать.

  3. Дайте описательные имена вашим переменным, чтобы уменьшить путаницу. В частности, не используйте их типы в качестве имен (например, 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

Надеюсь, это поможет!

мои извинения за плохое объяснение моей проблемы. Я пытаюсь добавить свой раздел кода, выполняющий операцию в цикле [j] for. добавление этого раздела кода Additional_Value = 1, если j > 1: example_list[j] = round((example_list[j]+ Additional_Value),3). Я получаю TypeError: можно только объединить список (не «int») в список. что я никогда не видел раньше. Это то, с чем вы сталкивались в прошлом и хотели бы помочь мне сориентироваться? Спасибо за ваше время.

Patstro 19.04.2023 01:53

Очень тяжело читать код в комментариях. Возможно, вы можете отредактировать свой исходный вопрос и опубликовать точный пример сценария, с которым у вас есть проблемы, чтобы его было легче читать и чтобы другие могли попытаться запустить ваш фрагмент кода на своих локальных компьютерах. Если у вас есть вложенный список, как в моем фрагменте кода, проблема в том, что List[index] сам по себе является списком. Вам нужно получить к нему доступ с помощью List[index1][index2], чтобы получить запись в index2 в подсписке index1.

ahuma 19.04.2023 10:49

Другие вопросы по теме