Сортировка без учета регистра с помощью sort(list, key=str.lower)

У меня есть модуль, позволяющий пользователям вводить 10 слов, затем расставлять их по алфавиту и отображать. Простое использование функций сортировки сначала ставит слова с заглавной буквы, поэтому я использовал sort(list, key=str.lower), но вывод по-прежнему неверен. Код и ошибка ниже:

def words_function():

    words = [input("Enter 10 words, one at a time: ") for i in range(10)]
    sorted(words, key=str.lower)
    print("Alphabetized, your words are: ", words)

    userSearch = input("What word would you like to search for?")

    if userSearch in words:
        print("Found!")
    else:
        print("Not Found!")     

words_function()

И он выводит в следующем порядке: ['Трубкозуб', 'Кока-кола', 'Рабочий стол', 'Быстрый', 'Быстрый', 'Телевидение', 'бордель', 'книга', 'Папа', 'собака']

Который в прошлый раз, когда я изучал английский, не был алфавитным =p. Что еще мне нужно добавить к моей сортировке или изменить, чтобы она отображалась в правильном алфавитном порядке, игнорируя, является ли слово строчным или заглавным, и просто сортируя по алфавиту?

Муравьед, книга, бордель, кокс, папа, письменный стол, собака, телевизор, шустрый, зиппи


person nickg131    schedule 12.12.2013    source источник


Ответы (3)


sorted возвращает отсортированный список. Он не изменяет список на месте. Вам нужно будет где-то хранить отсортированный список

words = sorted(words, key=str.lower)

На питоне 2.6

>>> words= ['Aardvark', 'coke', 'Desk', 'Zippy', 'zappy', 'Television', 'brothel', 'book', 'Dad', 'dog']
>>> sorted(words,key=str.lower)
['Aardvark', 'book', 'brothel', 'coke', 'Dad', 'Desk', 'dog', 'Television', 'zappy', 'Zippy']
>>> words
['Aardvark', 'coke', 'Desk', 'Zippy', 'zappy', 'Television', 'brothel', 'book', 'Dad', 'dog']
>>> words = sorted(words,key=str.lower)
>>> words
['Aardvark', 'book', 'brothel', 'coke', 'Dad', 'Desk', 'dog', 'Television', 'zappy', 'Zippy']
person RedBaron    schedule 12.12.2013
comment
Это работает! Спасибо! =) Я бы проголосовал, но я слишком нуб, мне это не позволит. Теперь... в моей поисковой функции, могу ли я сделать так, чтобы они могли ввести aardvark, и он возвращал Found, даже если при поиске он не пишется с заглавной буквы? - person nickg131; 12.12.2013
comment
Извините, я должен был указать, я использую 3.3.2, поэтому ответ, данный RedBaron, работает. - person nickg131; 12.12.2013
comment
Спасибо, барон. =) Я ценю это! - person nickg131; 12.12.2013
comment
@ user3093807 Вы всегда можете проголосовать и принять ;). Для поиска без учета регистра преобразуйте оба (список и слово) в нижний регистр, а затем выполните поиск word_to_search.lower() in (x.lower() for x in words) - person RedBaron; 12.12.2013

Вы можете использовать метод (встроенный список)

list.sort()    

Сортирует и изменяет список

person Adam    schedule 21.10.2014
comment
Это не будет сортировать без учета регистра. list.sort() поставит заглавные буквы перед строчными. sorted(words, key=str.lower) лучше в этом отношении, за исключением того, что вам нужно захватить вывод. - person Dannid; 18.01.2017

отсортировано (слова, ключ = str.lower)

Это не изменит назначение слов, в данный момент слова не изменились. но 'words.sort(key = str.lower)' изменяет назначение напрямую. но забавно, что даже вы снова отсортировали список. список не полностью в алфавитном порядке,

пример.

words = ['Aardvark', 'кокаин', 'стол', 'шустрый', 'шустрый', 'телевидение', 'бордель', 'книга', 'папа', 'собака']

sorted(words, key= str.lower) ['Трубкозуб', 'книга', 'бордель', 'кокаин', 'Папа', 'Рабочий стол', 'собака', 'Телевидение', 'быстрый', 'Быстрый' ]

вы можете видеть, что «собака» стоит после «стола»

другой пример.

слова = ['a', 'b', 'c', 'd', 'E', 'F', 'A', 'B', 'b', 'A']

words.sort (ключ = str.lower)

слова

['a', 'A', 'A', 'b', 'B', 'b', 'c', 'd', 'E', 'F']

.sort(key=str.lower) не означает правильную сортировку значений в обычном алфавитном порядке.

person Michael Yim    schedule 10.06.2018