Это то время года, когда программисты хотят перетасовать список таким образом, чтобы ни один элемент не находился на своей первоначальной позиции (по крайней мере, в Нидерландах мы отмечаем Sinterklaas и выбираем соломинки для решения, кто пишет, кто стих). У кого-нибудь есть хороший Python единственный оператор для этого?
Итак, пример ввода: range(10)
Пример вывода: [2,8,4,1,3,7,5,9,6,0]
Неверный вывод будет [2,8,4,1,3,5,7,9,6,0]
, потому что 5
находится в исходном положении. Это означало бы, что человек 5 должен написать стихотворение самому себе, и это не так весело.
edit Многие люди повторяют задание столько раз, сколько необходимо, чтобы везет и считают, что на самом деле решение является удовлетворительным. Это плохой подход, так как в теории это может занять бесконечно много времени. Барт действительно предлагает лучший подход, но по той или иной причине я не могу понять это…
edit Под oneliner я подразумеваю отдельное утверждение . Как видно, Python также может сжимать несколько операторов в одной строке. Я этого не знал. В настоящее время есть очень хорошие решения, использующие только точку с запятой для имитации многострочного поведения в одной строке. Отсюда: «Вы можете сделать это в одном утверждении?»