Расположить список в алфавитном порядке python2 - PullRequest
0 голосов
/ 30 октября 2019

Список строк, сортировка списка по алфавиту, если есть заглавные и строчные буквы, сортируйте их вместе, игнорируя регистр при сортировке. Если одно и то же слово повторяется с другим регистром, сначала выведите нижний регистр, а затем одинв верхнем регистре. при сортировке убедитесь, что числа печатаются до алфавитов. Игнорировать знаки препинания и специальные символы при сортировке

Входные данные Первая строка содержит целое число N, обозначающее количество строк в списке. Затем следующая N-строка содержит слова в списке

Выходные данные Распечатать списокслова после сортировки в возрастающем алфавитном порядке. Пожалуйста, убедитесь, что ваши выходные данные соответствуют образцам.

Ниже приведен код

import fileinput
import sys

for line in fileinput.input():
    sys.stdout.write(line)

INPUT

5
USA
UK
Germany
Australia
Canada

Выход

Australia
Canada
Germany
UK
USA

Я тоже пытаюсь что-то сделать, но не решаю всю ситуацию

var = ['USA','UK','Germany','Australia','Canada']
s = sorted(var, key=lambda v: (v.upper(), v[0].islower()))
print(s)

1 Ответ

0 голосов
/ 30 октября 2019

Здесь у вас есть функция сортировки, которая надеется делать то, что вы хотите. Полное игнорирование специальных символов немного прикольное.

def sorting(word):
  new_word = ""
  for char in word:
    # Remove special characters
    if not char.isalnum():
      continue
    # Switch case
    new_word += char.upper() if char.islower() else char.lower()
  return (new_word.upper(), new_word)

Решили поменять регистры, так как для вас строчные должны быть заказаны перед прописными.

Используется:

words = []
n = int(input("Number of words: "))
for i in range(n):
  word = raw_input("> ")
  words.append(word)
result = sorted(words, key=sorting)
print(result)

Показывает:

Number of words: 5
> USA
> UK
> Germany
> Australia
> Canada
['Australia', 'Canada', 'Germany', 'UK', 'USA']

Можно также назвать так, дает тот же результат:

var = ['USA','UK','Germany','Australia','Canada']
s = sorted(var, key=sorting)
print(s)

Еще один более сложный пример, чтобы показать результат:

Number of words: 5
> ASD
> asd
> asD
> aSD
> .asd
['asd', '.asd', 'asD', 'aSD', 'ASD']

В зависимости от порядка ввода .asd может быть первым или вторым, это вы получаете за игнорирование специальных символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...