在Python中排序日期列表

时间:2018-07-21 11:10:40

标签: python regex list sorting lambda

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

您知道解决该问题的简便方法还是导致该错误的原因?我似乎无法弄清楚。

任何赞赏:)

1 个答案:

答案 0 :(得分:0)

代码中最基本的错误所在:

for v in enumerate(strats):

您显然忘记了enumerate(...)返回 2 值:索引和迭代器中的当前

因此,正如您仅使用单个 v一样,它获取的是索引,而不是

另一个重要的一点是,如果datetime字符串写为 yyyy.MM.dd hh:mm:ss,您可以仅使用字符串排序对其进行排序。

因此,要收集字符串,您需要一个 list comprehension ,其中包含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模块。