Как я могу внести изменения в текущий элемент в цикле For?

#python #python-3.x

#python #python-3.x

Вопрос:

 for i in A:
    if i < 0:
        A[i] == abs(i)
  

Как я могу использовать текущий элемент в цикле for, я хочу сделать текущий элемент положительным, если он отрицательный.

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

1. Какой тип A ? Это должно сработать, если это словарь, это не будет работать для списка.

2. == для равенства используйте =

3. в python мы предлагаем создать новый список с новыми значениями и присвоить старой переменной.

4. @MitchelPaulin смехотворно, обычно ошибка в другом направлении.

5. Можете ли вы привести пример того, что A такое?

Ответ №1:

i вот значение каждого элемента в вашем списке. Обычно i ссылается на индекс, который побудил вас написать A[i] ссылку на текущий элемент. Но A[i] это не то, что вы хотите, и это даже может быть ошибкой, в зависимости от значений в A .

Вам нужен индекс для изменения значений в списке. Один из способов получить индекс — использовать enumerate() :

 for index, value in enumerate(A):
    if value < 0:
        A[index] = abs(value)
  

Обратите внимание на использование значимых имен переменных, чтобы вы не запутались.

Ответ №2:

Когда вы говорите, for i in A то на каждой итерации i будет элемент в A, а не интерактивный индекс. Что вы хотите сделать, это что-то вроде этого:

 for i, element in enumerate(A):
    if element < 0:
        A[i] = abs(element)
  

Ответ №3:

Мне нравится функциональность перечисления стандартной библиотеки python3 для достижения вашей цели. Например, если у вас было следующее:

 A = [4, 2, -3, 5, -2]
  

Вы могли бы сказать:

 for index, value in A:
    if value < 0:
        A[index] = abs(value)
  

Ответ №4:

Вы можете использовать enumerate() для перебора как элементов, так и индексов списка. Если вы просто выполняете обычную итерацию по списку, i это элемент списка, а не индекс, поэтому его нет смысла использовать A[i] .

 for i, el in enumerate(A):
    if el < 0:
        A[i] = abs(el)
  

Ответ №5:

Это также можно сделать в понимании списка:

 A = [abs(x) if x < 0 else x for x in A ]
  

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

1. Это можно сократить до [abs(x) for x in A]

2. да, это возможно, но поскольку в их исходном коде было выражение if, я хотел остаться верным этому, чтобы показать им, как это утверждение будет работать в понимании списка