Перемещение значений, но сохранение порядка в списке Python [дубликат]

Поскольку Perl имеет почти все "тайные" части из других списков, я скажу Вам одну вещь, что Perl не может:

Одна вещь, которую не может сделать Perl, имеют пустые произвольные URL в Вашем коде, потому что // оператор используется для регулярных выражений.

На всякий случай для Вас не было очевидно, какие предложения функций Perl, вот выборочный список, возможно, не полностью очевидных записей:

Устройство вареного пудинга - в Perl

Мобильность и стандартность - Там вероятны больше компьютеров с Perl, чем с компилятором C

Класс управления файлом/путем - Работы File::Find над еще большим количеством операционных систем, чем .NET

Кавычки для пробела разграничили списки и строки - Perl позволяет Вам выбирать почти произвольные кавычки для своего списка и строковых разделителей

Пространства имен Aliasable - Perl имеет их через присвоения шарика:

*My::Namespace:: = \%Your::Namespace

Статические инициализаторы - Perl может выполнить код почти в каждой фазе компиляции и возразить инстанцированию, от BEGIN (кодируйте синтаксический анализ) к CHECK (после того, как кодируйте синтаксический анализ) к import (в импорте модуля) к new (возразите инстанцированию) к DESTROY (возразите разрушению) к END (выход программы)

Функции являются гражданами Первого класса - точно так же, как в Perl

Область действия блока и закрытие - Perl имеют обоих

Вызывающие методы и средства доступа косвенно через переменную - Perl делают это также:

my $method = 'foo';
my $obj = My::Class->new();
$obj->$method( 'baz' ); # calls $obj->foo( 'baz' )

Определение методов через код - Perl позволяет это также:

*foo = sub { print "Hello world" };

Распространяющаяся онлайн-документация - Документация Perl онлайн и вероятна в Вашей системе также

Волшебные методы, которые называют каждый раз, когда Вы вызываете "несуществующую" функцию - реализации Perl, которые в АВТОЗАГРУЗКЕ функционируют

Символьные ссылки - Вам целесообразно избегать их. Они съедят Ваши дочерние элементы. Но конечно, Perl позволяет Вам предлагать своих детей кровожадным демонам.

Один свопинг значения строки - Perl позволяет присвоение списка

Способность заменить даже ядро функционирует с Вашей собственной функциональностью

use subs 'unlink'; 
sub unlink { print 'No.' }

или

BEGIN{
    *CORE::GLOBAL::unlink = sub {print 'no'}
};

unlink($_) for @ARGV

8
задан Josh Caswell 14 January 2015 в 21:54
поделиться

1 ответ

>>> a = [1,2,3,4,5]
>>> a.append(a.pop(0))
>>> a
[2, 3, 4, 5, 1]

Однако это дорого, так как необходимо сдвинуть содержимое всего списка, то есть O (n). Лучшим выбором может быть использование collections.deque , если он доступен в вашей версии Python, что позволяет вставлять и удалять объекты с любого конца примерно за время O (1):

>>> a = collections.deque([1,2,3,4,5])
>>> a
deque([1, 2, 3, 4, 5])
>>> a.rotate(-1)
>>> a
deque([2, 3, 4, 5, 1])

Обратите внимание также что оба эти решения включают изменение исходного объекта последовательности, тогда как ваше создает новый список и назначает его a . Итак, если бы мы сделали:

>>> c = a
>>> # rotate a

С вашим методом c будет по-прежнему ссылаться на исходный неповоротный список, а в моих методах он будет ссылаться на обновленный, повернутый список /deque.

25
ответ дан 5 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

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