Найти - Пользователи
Полная версия: Сортировка
Начало » Python для новичков » Сортировка
1 2
calmmalakai
Товарищи, здравствуйте. Что в этот код надо добавить, чтобы порядковые номера сохранялись как надо? Т.е, чтобы оставалось 1 2 3 4, а не каша. Подскажите пожалуйста
 def get_data(line):
    data = line[line.rfind(' ') + 1:].split('.')
    return tuple(map(int, data))[::-1]
with open('input.txt', 'r', encoding='utf-8') as f1, open("output.txt", 'w', encoding='utf-8') as f2:
    f2.write('\n'.join(sorted(f1.read().splitlines(), key=get_data)))
py.user.next
Пришли файл вывода output.txt, который должен получиться из этого input.txt .
calmmalakai
как-то так
Rodegast
 >>> f = """2. Ковалев А.В. 2000
   ...: 5. Рамазанов А.Д. 2001
   ...: 6. Рахимов И.Д. 2001
   ...: 4. Боднарчук К.А. 2002
   ...: 3. Николаев Н.А. 2003
   ...: 1. Мирошников Р.Н 2004"""
>>> sorted(f.split("\n"), key=lambda x: int(x.split('.')[0]))
['1. Мирошников Р.Н 2004',
 '2. Ковалев А.В. 2000',
 '3. Николаев Н.А. 2003',
 '4. Боднарчук К.А. 2002',
 '5. Рамазанов А.Д. 2001',
 '6. Рахимов И.Д. 2001']
calmmalakai
Суть в другом. Мне нужно отсортировать список людей из 1 файла во 2 по году рождения, у меня все получилось, но порядковые номера остались с фамилиями, а надо, чтобы они остались на своих местах
py.user.next
calmmalakai
у меня все получилось, но порядковые номера остались с фамилиями, а надо, чтобы они остались на своих местах
Ты прислал файл output.txt сюда, в котором они не остаются на своих местах, а остаются с именами.

Вот твой input.txt из сообщения
1. Мирошников Р.Н 2000
2. Ковалев А.В. 2000
3. Николаев Н.А. 2003
4. Боднарчук К.А. 2002
5. Рамазанов А.Д. 2001
6. Рахимов И.Д. 2001

Вот твой output.txt из сообщения
2. Ковалев А.В. 2000
5. Рамазанов А.Д. 2001
6. Рахимов И.Д. 2001
4. Боднарчук К.А. 2002
3. Николаев Н.А. 2003
1. Мирошников Р.Н 2004

Вот то, что получается по твоему скрипту из сообщения из input.txt из сообщения
1. Мирошников Р.Н 2000
2. Ковалев А.В. 2000
5. Рамазанов А.Д. 2001
6. Рахимов И.Д. 2001
4. Боднарчук К.А. 2002
3. Николаев Н.А. 2003

Теперь вопрос: что должно получиться? Если output.txt, который ты прислал сюда, неправильный, то нахера ты его сюда присылаешь? Ты должен сделать правильный output.txt руками и прислать его сюда. Тогда тебе напишут скрипт, который будет делать его уже не руками, а автоматически.
calmmalakai
Запутал я вас, дико извиняюсь. Я сам перепутал файлы. Сейчас все нормально вставлю. Суть вот в чем. В этом списке, который написал сам, лежит список людей(порядковый номер, ФИО, год рождения), мне нужно отсортировать людей по году рождения
calmmalakai
У меня получилось, но порядковый номер прикреплен к человеку. Как сделать так, чтобы порядковый номер был фиксированным? т.е. чтобы так и осталось 1 2 3, а не был прикреплен к людям
calmmalakai
Опять не тот input кинул, чтож я такой невнимательный((
py.user.next
calmmalakai
Запутал я вас, дико извиняюсь. Я сам перепутал файлы. Сейчас все нормально вставлю.
Ничего не вставил нормально. Прислал какую-то муть опять.

Вот то, что ты должен был прислать сюда. Это уже я руками это составил, потому что ты не в состоянии даже это сделать.

input.txt
1. Мирошников Р.Н 2004
2. Ковалев А.В. 2000
3. Николаев Н.А. 2003
4. Боднарчук К.А. 2002
5. Рамазанов А.Д. 2001
6. Рахимов И.Д. 2001

output.txt
1. Ковалев А.В. 2000
2. Рамазанов А.Д. 2001
3. Рахимов И.Д. 2001
4. Боднарчук К.А. 2002
5. Николаев Н.А. 2003
6. Мирошников Р.Н 2004

Не зная, что нужно получить в точности, ты взялся код на питоне писать. Так что учись проектировать программу до её написания.

  
>>> def f(text):
...     lines = text.splitlines()
...     lstripped = (i.split(' ', 1)[1] for i in lines)
...     lsorted = sorted(lstripped, key=lambda i: int(i.rsplit(' ', 1)[1]))
...     lenumerated = ('{}. {}'.format(n, s)
...                    for n, s in enumerate(lsorted, 1))
...     out = '\n'.join(lenumerated) + '\n'
...     return out
... 
>>> itext = """\
... 1. Мирошников Р.Н 2004
... 2. Ковалев А.В. 2000
... 3. Николаев Н.А. 2003
... 4. Боднарчук К.А. 2002
... 5. Рамазанов А.Д. 2001
... 6. Рахимов И.Д. 2001
... """
>>> 
>>> print(itext, end='')
1. Мирошников Р.Н 2004
2. Ковалев А.В. 2000
3. Николаев Н.А. 2003
4. Боднарчук К.А. 2002
5. Рамазанов А.Д. 2001
6. Рахимов И.Д. 2001
>>> 
>>> otext = f(itext)
>>> 
>>> print(otext, end='')
1. Ковалев А.В. 2000
2. Рамазанов А.Д. 2001
3. Рахимов И.Д. 2001
4. Боднарчук К.А. 2002
5. Николаев Н.А. 2003
6. Мирошников Р.Н 2004
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB