【问题标题】:Sort list for date in PythonPython中日期的排序列表
【发布时间】:2023-03-31 09:40:01
【问题描述】:
import re

arr1 = ['2018.07.17 11:30:00,-0.19', '2018.07.17 17:55:00,0.86']
arr2 = ['2018.07.17 11:34:00,-0.39', '2018.07.17 17:59:01,0.85']

def combine_strats_lambda(*strats):
    """
    Takes *strats in date,return format
    combines infinite amount of strats with date, return and packs them into 
    one
    single sorted array

   >> RETURN: combined list

   """
   temp = []

   # create combined list
   for v in enumerate(strats):
       i = 0
       while i < len(v[1]):
           temp.append(v[1][i])
           #k = re.findall(r"[\w']+", temp)[:6]
           i += 1

    temp2 = sorted(timestamps, key=lambda d: tuple(map(int, re.findall(r"[\w']+", d[0]))))

    return temp2

嗨,

我一直在尝试完成这个功能,它应该结合多个日期列表、百分比回报并对它们进行排序。

我遇到了一个使用 lambda 的解决方案,但我得到的只是这条消息:

return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object

您是否知道更简单的问题解决方案或错误是由什么引起的?我好像搞不懂。

任何赞赏:)

【问题讨论】:

  • 就像错误说的那样,它期望字符串-y; temp 是一个列表
  • @RafaelC: return sorted((arr1+arr2), key=lambda k: k.split(',')[0]) 这就是我在函数中所需要的,非常优雅。谢谢
  • 删除了我之前的评论,很高兴你能及时看到哈哈 :) 很高兴我能帮上忙 :)

标签: python regex list sorting lambda


【解决方案1】:

您的代码中非常基本的错误是:

for v in enumerate(strats):

您显然忘记了enumerate(...) 返回两个 values:index 和 iterable 中的当前 value

所以,当您只使用 single v 时,它会获得 index,而不是 value

另一个重要的一点是,如果日期时间字符串写成 yyyy.MM.dd hh:mm:ss,你可以只使用字符串排序。

所以,要收集字符串,您需要一个 列表理解,其中包含 2 个嵌套 循环。

要对它们进行排序,您应该使用sorted 函数,指定为排序 在逗号之前键入“初始”(日期/时间)部分。

总而言之,为了得到排序后的字符串列表,取自几个 函数的参数,按日期/时间部分排序, 您可以使用以下程序,使用 Python 3.6 版本编写:

arr1 = ['2018.07.17 11:30:00,-0.19', '2018.07.17 17:55:00,0.86']
arr2 = ['2018.07.17 11:34:00,-0.39', '2018.07.17 17:59:01,0.85']

def combine_strats_lambda(*strats):
    temp = [ v2 for v1 in strats for v2 in v1 ]
    return sorted(temp, key = lambda v: v.split(',')[0])

res = combine_strats_lambda(arr1, arr2)
for x in res:
    parts = x.split(',')
    print("{:20s} {:>6s}".format(parts[0], parts[1]))

它甚至不使用re 模块。

【讨论】:

    猜你喜欢
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    相关资源
    最近更新 更多