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
您知道解决该问题的简便方法还是导致该错误的原因?我似乎无法弄清楚。
任何赞赏:)
答案 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
模块。