python:有效地构建和维护一个按降序排列的字符串列表

标签 python python-3.x list performance

我想高效构建并填充一个列表,其中包含代表文件名的字符串。

文件名具有定义良好的结构,如下所示:

'20190810-012500_foo_bar_eggs.zip',

其中初始数字表示格式为 %Y%m%d-%H%M%S 的日期。

我希望按时间递减顺序构建列表。

以下适用于递增顺序,但我无法扭转它。 请注意,下面的 key 可能与根本不指定 key 的作用相同。我只想展示一种使用 key 的可能方式。

import os
import time
from blist import sortedlist

l = sortedlist([], key= lambda x: time.strptime(x[:15], '%Y%m%d-%H%M%S'))

for f in os.listdir(my_dir):  # the number of files can be big
    if "_foo_" in f:   # I need to filter out some
        l.add(f)

重要提示:对我来说最重要的是效率。简单的解决方案可以是在创建列表后简单地进行排序,像我的示例代码中那样使用键并在最后反转列表,仅在一个列表理解中完成上述所有操作,等等。我希望最大限度地减少操作次数并最大限度地提高效率。

我认为(并且可能是错误的)排序列表可能是一种有效的方式,但如果您有更好的了解,请告诉我。谢谢。

附言。 blist 文档 here .

最佳答案

时间.mktime

尝试使用 time.mktime()strptime() 返回的 struct_time 转换为 float 。添加 - 符号以反转排序。

def newest_first(s):
    return -time.mktime(time.strptime(s[:15], '%Y%m%d-%H%M%S'))

l = sortedlist([], key=oldest_first)

关于python:有效地构建和维护一个按降序排列的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57505438/

相关文章:

python - Heroku django "OSError: [Errno 2] No such file or directory: '/static/static'"

python - 关于 np.tile 和 numpy 广播的困惑

Python 套接字服务器失败

python - 如何在 zeep 中使用 wsdl 的每种方法发送 header ?

python - 过滤字符串中包含 N 位数字的列表元素

python - 将 json 与 OrderedDict 和 Datetime 一起使用

python - 格式化德语的刻度标签,即以点作为千位分隔符,以逗号作为十进制分隔符

Python如何将列表打印到列表

python - 如何将字典列表转换为....?

java - 如何在java中声明匿名数组列表?