Страницы

Поиск по вопросам

пятница, 28 февраля 2020 г.

Как получить числа из строки и корректно отсортировать?

#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]

Комментариев нет:

Отправить комментарий