Что делает эта нотация для списков в Python: «someList »?

Иногда я получаю такой способ печати или возврата спискаsomeList[:] . Я не понимаю, почему люди используют его, так как он возвращает полный список.

Почему бы просто не написать someList , без части [:] ?

2 Solutions collect form web for “Что делает эта нотация для списков в Python: «someList »?”

[:] создает срез, обычно используемый для получения только части списка. Без указателя минимального / максимального значения он создает копию всего списка. Вот пример Python, демонстрирующий это:

 >>> a = [1,2,3] >>> b1 = a >>> b2 = a[:] >>> b1.append(50) >>> b2.append(51) >>> a [1, 2, 3, 50] >>> b1 [1, 2, 3, 50] >>> b2 [1, 2, 3, 51] 

Обратите внимание, что добавление к b1 также добавило значение в a . Однако добавление к b2 не изменяло a , т. b2 является копией.

В python, когда вы делаете a = b , a не принимает значение b, а ссылается на то же значение, на которое ссылается b. Чтобы увидеть это, сделайте:

 >>> a = {'Test': 42} >>> b = a >>> b['Test'] = 24 

В чем теперь значение a?

 >>> a['Test'] 24 

Это похоже на списки, поэтому мы должны найти способ действительно скопировать список, а не ссылаться на него. Одним из способов может быть восстановление списка copy = list(list1) или использование функций модуля copy . Но, в конце концов, самый простой способ, самый лучший, лучший способ (;)) для этого – скопировать каждое значение первого списка в другое, выполнив copy = list1[:] . Он использует срезы, здесь list1 вырезано из индекса 0 в индекс len (list1), поэтому возвращается весь список1!

Кроме того, метод slice немного быстрее: с помощью метода time.clock () для измерения среднего времени выполнения 1000 присвоений списков, каждый из которых содержит 10000 случайных целых чисел, с фрагментами, конструктором и глубокой копией, результаты показывают, что срезы На 15% быстрее, чем метод конструктора, а deepcopy – в 4 раза медленнее. Однако это увеличение времени незначительно при использовании небольших списков: таким образом, использование copy = list(list_to_copy) или copy = list_to_copy[:] соответствует предпочтениям разработчика.

Наконец, мы часто забываем метод list.copy, который, кажется, быстрее! Фактически, это даже на 13% быстрее, чем метод среза!

  • Преобразование списка чисел в строки
  • Если нарезка не создает копию списка или список (), как я могу получить реальную копию моего списка?
  • Python объединяет несколько списков с пересечением
  • Группировка списков Python и сумма
  • Пересечение переменного количества списков
  • Python - рекурсивный список сумм
  • Как мне перебирать список Python по двум?
  • Удаление элементов из списка при повторении без использования дополнительной памяти в Python
  • TypeError: unhashable type: 'list' при использовании встроенной функции set
  • Самый эффективный способ поиска / поиска в огромном списке (python)
  • Объединение двух отсортированных списков в Python
  • Python - лучший язык программирования в мире.