Как перечислить и отсортировать список из текстового документа в Python - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь перечислить список в Python, используя текстовый документ.Я прочитал документ, но не могу отсортировать или перечислить их.Цель состоит в том, чтобы позвонить по времени, когда они закончили гонку, отсортировать их, а затем перечислить их по порядку финиша.

Вывод всегда: (['18: 44 '], объект генератора перечисляет в 0x0000000003143630) Я не уверен, почему он говорит «объект генератора перечисляет в 0x0000000003143630» или как перечислить отсортированный список.

def get_sec(time_str):
    h, m = time_str.split(':')
    return int(h) * 3600 + int(m) * 60
def enumerate(sequence, start=0):
    n = start
    for elem in sequence:
        yield n, elem
        n += 1
with open("Race_Results_Sample.txt", "r")as myList:
    myList = myList.read()
    myList = [l.split(",") for l in myList.splitlines()]
    myList = sorted(myList, key=lambda kv: kv[1])
for line in myList:
    num, last, org, time = line
    place = []
    place.append(time)
    placenum = enumerate(sorted(place))
    print(place, placenum)
for line in myList:
    num, last, org, time = line
    new_time = get_sec(time)
    mile = round((((new_time/ 3.10686)/60)/60), 3)
    mile = str(mile)
    print ('{:<20s}{:<5s}{:<5s}{:<7s}{:<10s}'.format(last, num, org, time, mile))

Первый «for line in myList» - это просто тест, чтобы увидеть, как он работает сам по себе.В конце концов я помещу его во второй раздел «for line in myList», чтобы немного очистить код.Заранее спасибо за помощь.

ЭТО ТЕКУЩИЙ ВЫХОД

(['18:44'], generator object enumerate at 0x0000000003143630>)
(['18:23'], generator object enumerate at 0x0000000003143678>)
(['18:28'], generator object enumerate at 0x0000000003143630>)
(['18:36'], generator object enumerate at 0x0000000003143678>)
(['19:05'], generator object enumerate at 0x0000000003143630>)
(['19:10'], generator object enumerate at 0x0000000003143678>)
(['18:22'], generator object enumerate at 0x0000000003143630>)
(['18:03'], generator object enumerate at 0x0000000003143678>)
(['18:49'], generator object enumerate at 0x0000000003143630>)
(['19:01'], generator object enumerate at 0x0000000003143678>)
(['18:33'], generator object enumerate at 0x0000000003143630>)
(['18:45'], generator object enumerate at 0x0000000003143678>)
(['18:55'], generator object enumerate at 0x0000000003143630>)
(['18:58'], generator object enumerate at 0x0000000003143678>)
(['18:09'], generator object enumerate at 0x0000000003143630>)

Процесс завершен с кодом выхода 0

1 Ответ

0 голосов
/ 21 ноября 2018

enumerate возвращает не список, а специальный тип генератора.Напишите

placenum = list(enumerate(sorted(place)))

, и поведение вашей программы станет более понятным.В качестве альтернативы вы можете использовать (потреблять) вызов enumerate() непосредственно в цикле for, как если бы это был список.Например,

for rank, value in enumerate(sorted(place)):
    print(rank, value)
...