#python #строки #list
Есть файл с числами через запятую, без пробелов. Необходимо считать его и вывести в консоль отсортированный список по возрастанию и убиванию. Вот мои попытки: import re try: file_path = open(input('Введите путь к файлу: ')) except IOError: print('File not found') file_value = file_path.read() file_numbers = re.findall('\d+', file_value) # print(file_numbers) # print(type(file_numbers)) sorted(file_numbers, key=int) print(file_numbers) sorted(file_numbers, key=int, reverse=True) print(file_numbers) Собственно результат: ['6', '2', '3', '13', '5', '1', '7', '9', '18', '20', '16', '12', '15', '14', '10', '11', '17', '9', '19'] ['6', '2', '3', '13', '5', '1', '7', '9', '18', '20', '16', '12', '15', '14', '10', '11', '17', '9', '19'] В чем ошибка и как поправить? :( Так же были попытки сделать вот так: try: file_path = open(input('Введите путь к файлу: ')) except IOError: print('File not found') file_value = file_path.read() # file_numbers = re.findall('\d+', file_value) file_numbers = [] for i in file_value: try: num = int(i) file_numbers.append(num) except ValueError: continue # print(file_numbers) # print(type(file_numbers)) sorted(file_numbers, key=int) print(file_numbers) sorted(file_numbers, key=int, reverse=True) print(file_numbers) И на выходе получил вообще бред: [6, 2, 3, 1, 3, 5, 1, 7, 9, 1, 8, 2, 0, 1, 6, 1, 2, 1, 5, 1, 4, 1, 0, 1, 1, 1, 7, 9, 1, 9] [6, 2, 3, 1, 3, 5, 1, 7, 9, 1, 8, 2, 0, 1, 6, 1, 2, 1, 5, 1, 4, 1, 0, 1, 1, 1, 7, 9, 1, 9]
Ответы
Ответ 1
И на выходе получил вообще бред: Ваш код sorted(file_numbers, key=int) правильно был написан, но sorted возвращает новый отсортированный список, не изменяя исходный, поэтому вам нужно было сделать так: file_numbers = sorted(file_numbers, key=int) Можно отсортировать "на месте", как вы и хотели, но для этого нужно будет использовать sort: file_numbers.sort(key=int)Ответ 2
Прежде всего, после получения списка строк, превратите его в список чисел: file_numbers = [int(number) for number in file_numbers] Затем - чтобы максимально сохранить ваш код - используйте вместо функции sorted() метод списка sort() (для прямой сортировки списка на месте): file_numbers.sort() print(file_numbers) file_numbers.sort(reverse=True) # или - более ефективно - file_numbers.reverse() print(file_numbers) Вывод: [1, 2, 3, 5, 6, 7, 9, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] [20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 9, 7, 6, 5, 3, 2, 1]
Комментариев нет:
Отправить комментарий