Python меняет значения массива [duplicate]

Ну, простыми словами:

Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

143
задан mikl 22 March 2010 в 20:00
поделиться

8 ответов

    i = ['title', 'email', 'password2', 'password1', 'first_name', 
         'last_name', 'next', 'newsletter']
    a, b = i.index('password2'), i.index('password1')
    i[b], i[a] = i[a], i[b]
284
ответ дан samtregar 3 September 2018 в 17:31
поделиться
for i in range(len(arr)):
    if l[-1] > l[i]:
        l[-1], l[i] = l[i], l[-1]
        break

в результате этого, если последний элемент больше, чем элемент в позиции i, тогда оба они меняются местами.

0
ответ дан Aditya Deshpande 3 September 2018 в 17:31
поделиться

Учитывая ваши спецификации, я бы использовал назначение slice:

>>> L = ['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']
>>> i = L.index('password2')
>>> L[i:i+2] = L[i+1:i-1:-1]
>>> L
['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter']

Правая часть назначения среза представляет собой «обратный срез» и также может быть написана:

L[i:i+2] = reversed(L[i:i+2])

, если вы обнаружите, что это более читаемо, как многие из них.

15
ответ дан Alex Martelli 3 September 2018 в 17:31
поделиться
  • 1
    Почему это не работает, если вы хотите переключить название и почту, первый элемент со вторым? – Luigi Tiburzi 26 October 2013 в 15:29
  • 2
    Извините, теперь я понимаю, в i-1 нет элементов, поэтому возвращается пустой список – Luigi Tiburzi 26 October 2013 в 15:35

Ого!

x = i[2]; i[2] = i[3]; i[3] = x

Простой лучше, чем сложный

Примечание: Если вы не знаете позицию:

index = list.index("password1")  # = 3 in the given list
-1
ответ дан Apostolos 3 September 2018 в 17:31
поделиться
  • 1
    Когда вы переходите к выводу, что все остальные - идиоты, возможно, было бы разумно сначала проверить, правильно ли вы поняли вопрос. – mikl 12 May 2018 в 18:58
  • 2
    Вопрос очень прост: «Как переключить положение двух элементов в списке Python». Который я показываю, как сделать это очень просто. Пожалуйста, укажите, где моя ошибка, вместо того, чтобы опрокидывать и предлагать, чтобы я не понял этот вопрос. Тогда, я , конечно, не сказал, что все - идиот. Я был просто удивлен, насколько сложным стал этот предмет. И усложнение не означает идиотизм. – Apostolos 12 May 2018 в 22:20
  • 3
    Попробуйте прочитать полный вопрос, а не только заголовок. – mikl 13 May 2018 в 09:40
  • 4
    Вы все еще не говорите мне, что не так ... В случае, если вы имеете в виду, что вопросник не знает положения «passowrd1», я добавил примечание об этом. Я не знаю, что еще вам нужно. – Apostolos 13 May 2018 в 22:12
  • 5
    Правильно, теперь, если вы очистите свой пример, чтобы использовать его, ваш ответ будет примерно таким же, как принятый ответ: stackoverflow.com/a/2493980/66851 – mikl 13 May 2018 в 22:17

Простая замена Python выглядит так:

foo[i], foo[j] = foo[j], foo[i]

Теперь вам нужно всего лишь указать, что i есть, и это легко сделать с помощью index:

i = foo.index("password2")
119
ответ дан Can Berk Güder 3 September 2018 в 17:31
поделиться

вы можете использовать, например:

>>> test_list = ['title', 'email', 'password2', 'password1', 'first_name',
                 'last_name', 'next', 'newsletter']
>>> reorder_func = lambda x: x.insert(x.index('password2'),  x.pop(x.index('password2')+1))
>>> reorder_func(test_list)
>>> test_list
... ['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter']
0
ответ дан SmartElectron 3 September 2018 в 17:31
поделиться

Я не эксперт в python, но вы могли бы попробовать: say

i = (1,2)

res = lambda i: (i[1],i[0])
print 'res(1, 2) = {0}'.format(res(1, 2)) 

выше дал бы o / p as:

res(1, 2) = (2,1)
-1
ответ дан Trimax 3 September 2018 в 17:31
поделиться
  • 1
    Это не работает, не зная положения клавиш для обмена. – mikl 6 August 2016 в 13:00

Как это может быть дольше, чем

tmp = my_list[indexOfPwd2]
my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1]
my_list[indexOfPwd2 + 1] = tmp

Это простой обмен с использованием временного хранилища.

5
ответ дан unwind 3 September 2018 в 17:31
поделиться
  • 1
    Если вы хотите быть действительно «Pythonic», об этом вы всегда можете это сделать: my_list[indexOfPwd2],my_list[indexOfPwd2+1] = my_list[indexOfPwd2+1],my_list[indexOfPwd2] – Brent Writes Code 22 March 2010 в 17:32
Другие вопросы по тегам:

Похожие вопросы: