Вы могли перевести каждую строку в нижний регистр однажды---лениво только при необходимости в нем, или как в предварительной передаче в вид, если Вы знаете о сортировке всего набора строк. Существует несколько способов присоединить этот ключ сравнения к фактическим отсортированным данным, но эти методы должны быть обращены в отдельном вопросе.
Примечание, что эта техника может использоваться не только для обработки верхних проблем / проблем нижнего регистра, но и для других типов сортировки, таких как локаль определенная сортировка или заголовок "стиля Библиотеки", сортирующий, который игнорирует передовицы и иначе нормализует данные прежде, чем отсортировать их.
Ну, это зависит от того, как вы это видите. Вы можете посмотреть на elses вот так (извините за крик, это единственный способ сделать акцент в коде):
if condition:
do_something()
IF THE PREVIOUS CONDITION WAS FALSE:
do_something_else()
Теперь есть очевидное сходство между if / else и try / except / else, если вы видите else оператор как else к оператору except. Примерно так.
try:
do_something()
IF THERE WAS AN EXCEPTION:
pass:
IF THE PREVIOUS CONDITION WAS FALSE:
do_something_else()
finally:
cleanup()
То же самое и с else / for:
IF some_iterator IS NOT EMPTY:
i = next(some_iterator)
print(i)
IF THE PREVIOUS CONDITION WAS FALSE:
print("Iterator is empty!")
Итак, здесь мы видим, что else в некотором фундаментальном смысле do работает точно так же во всех трех случаях.
Но вы также можете увидеть else таким образом:
try:
do_something()
except someException:
pass:
IF NO EXCEPTION:
do_something_else()
finally:
cleanup()
И тогда это уже не то же самое, а else, потому что что-то вроде «если ничего другого». Таким же образом вы можете увидеть for / else:
for i in some_iterator:
print(i)
IF NO MORE ITERATING:
print("Iterator is empty!")
Но опять же, учитывая elif,
Конструкция for else
выполняет предложение else
, если для цикла не выполнялась инструкция break
, как описано здесь Например, это предложение else никогда не вычисляется
for i in range(1,10):
if i % 5 == 0:
print i
break
else:
print "nothing divisible by 5"
Да, как упомянул Эли, предложение else выполняется только в том случае, если вы не нарушите его. Это мешает вам реализовать такой код:
for i in range(1,10):
if i % 5 == 0:
print i
break
if i % 5 != 0:
print "nothing divisible by 5"
Что примерно эквивалентно здесь, но удобно, если условия для выхода немного сложнее (например, проверка различных возможных условий или комбинаций условий).