Форум сайта python.su
Всем привет!
Есть задача написать функцию:
Функция принимает в качестве аргумента список строк.
Необходимо вернуть отсортированный список строк, в котором: сначала идет группа строк, начинающихся на ‘x’, затем все остальные.
Наример: из получится
Подсказка: это можно сделать при помощи склеивания 2х заранее отсортированных списков
Есть код:
words = ['mix', 'xyz', 'apple', 'xanadu', 'aardvark'] def front_x(words): x_files = [] for i in words: if i[0] == 'x': words.remove(i) x_files.append(i) return x_files.extend(words) print(front_x(words))
Отредактировано random_box (Фев. 3, 2017 12:25:10)
Офлайн
random_box
random_box
почему “return” возвращает “None”?
Офлайн
FishHook
Я все понял! Огромное спасибо
Офлайн
def front_x(words, x_files = []): for i,x in enumerate(words): if x[0] == 'x': x_files.append(words.pop(i)) return sorted(x_files) + sorted(words) words = ['mix', 'xyz', 'apple', 'xanadu', 'aardvark'] print(front_x(words))
Отредактировано marvellik (Фев. 3, 2017 17:16:41)
Офлайн
marvellikТак нельзя делать никогда. Тот пустой список, который у вас в параметрах, создается один раз во время создания объекта функции. В нем будут сохраняться все изменения при каждом вызове функции.def front_x(words, x_files = []):
Отредактировано FishHook (Фев. 3, 2017 17:31:20)
Офлайн
да согласен есть такой косяк что то написал под задачу но не учел что в реальности функция может быть вызвана много раз. но что так делать нельзя не согласен все зависит от требуемых результатов.
Офлайн
marvellikПобочный эффект это. Нужно писать функции так, чтобы было минимум побочных эффектов. А уж основывать что-то на побочном эффекте - верх беспомощности. Того же результата можно достичь с функцией без побочного эффекта.
но что так делать нельзя не согласен все зависит от требуемых результатов.
Отредактировано py.user.next (Фев. 4, 2017 02:26:51)
Офлайн
marvellikЕсли вы
не согласен все зависит от требуемых результатов
Офлайн