【问题标题】:How to enumerate and sort a list from a text document in Python如何在 Python 中从文本文档中枚举和排序列表
【发布时间】:2019-04-24 02:44:55
【问题描述】:

我正在尝试使用文本文档在 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 结束

【问题讨论】:

  • 我想你只需要写placenum = list(enumerate(sorted(place)))
  • 既然有a builtin of that same name and definition,为什么还要定义enumerate
  • 您正在创建一个生成器,然后打印它。你期待是什么?
  • 另外,已经有一个内置的enumerate

标签: python python-3.x python-2.7 sorting enumerate


【解决方案1】:

enumerate 不返回列表,而是一种特殊的生成器。写

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

你的程序的行为会更有意义。或者,您可以直接在for 循环中使用(使用)对enumerate() 的调用,就好像它是一个列表一样。例如

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

【讨论】:

  • 我现在可以让它枚举排序时间,但它现在打印出所有行,而不仅仅是枚举和时间。对于排名,枚举中的值(排序(myList,key = lambda kv:kv [3]),1):打印(排名,值)
  • 没错,随心所欲地调整它。您的问题是关于 enumerate 的使用。请注意,如果您枚举元组,则会在结果中获得两级嵌套。所以你可以写for rank, (num, last, org, time) in enumerate(myList): ...
猜你喜欢
  • 2013-08-26
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 2021-05-10
  • 1970-01-01
  • 2013-05-19
  • 2017-07-21
相关资源
最近更新 更多