在我的代码中,我有一个名为stamp
的列表和一个名为focal
的列表。两个列表中都有时间戳,我需要在stamp
中找到最后一个时间戳,并且比每个focal
大但小于focal
中的下一个元素,并将其附加到列表中称为times
以下是每个列表中的一个小样本集:
stamp
['2018-07-21,11:37:37', '2018-07-21,11:37:48', '2018-07-21,11:37:52', '2018-07-21,11:38:12', '2018-07-21,11:38:45', '2018-07-21,11:39:04', '2018-07-21,11:39:51', '2018-07-21,11:41:36', '2018-07-21,11:41:52', '2018-07-21,11:42:01', '2018-07-21,11:42:24', '2018-07-21,11:42:27', '2018-07-21,11:43:01', '2018-07-21,11:43:56', '2018-07-21,11:44:13', '2018-07-21,11:44:24', '2018-07-21,11:45:20', '2018-07-21,11:45:32', '2018-07-21,11:45:40', '2018-07-21,11:45:51', '2018-07-21,11:46:20', '2018-07-21,11:46:36', '2018-07-21,11:49:01', '2018-07-21,11:50:12', '2018-07-21,11:50:45', '2018-07-21,11:51:16', '2018-07-21,11:51:32', '2018-07-21,11:51:47', '2018-07-21,11:52:10', '2018-07-21,11:52:13', '2018-07-21,11:52:16', '2018-07-21,11:52:19', '2018-07-21,11:53:22']
focal
['2018-07-21,11:37:20', '2018-07-21,11:52:57']
因此要附加到times
的项目是[2018-07-21,11:52:19]
我当前要做的代码是:
for x in range(len(focal)-1):
for y in range(len(stamp)):
if focal[x] <= stamp[y] and stamp[y] < focal[x+1]:
times.append(stamp[y])
但是它不执行我想要的操作,我不确定从这里去哪里。
答案 0 :(得分:1)
现在,您要追加所有大于focus [x]但小于focus [x + 1]的对象。如果只想在最后一个元素上附加此属性,请尝试以下操作:
for x in range(len(focal)-1):
for y in range(len(stamp)-1):
if focal[x] <= stamp[y] and stamp[y] < focal[x+1] and stamp[y+1] >= focal[x+1]:
times.append(stamp[y])
答案 1 :(得分:0)
对此很难理解。使用列表理解。
第一步是规范您的要求,以便于理解。基本上,您想查找所有focal[x] < stamp < focal[x+1]
并采用最高值的元素。
通过列表理解,这是一行:
max([x for x in stamp if focal[x] < x < focal[x+1]])
如果stamp
中的值未排序,则此代码也适用。
循环播放:
for x in range(len(focal)-1):
times.append(max([x for x in stamp if focal[x] < x < focal[x+1]]))
如果您实际上想要stamp
中的最后一个值(相对于最新值)在focus给出的范围内,则可以这样获得:
[x for x in stamp if focal[x] < x < focal[x+1]][-1]
此外,请注意,根据您的数据,日期的字符串比较可能不是非常可靠。这只是字母比较。考虑将日期存储为某种日期类型。
答案 2 :(得分:0)
您可以利用itertools.takewhile
:
from itertools import takewhile
stamp = ['2018-07-21,11:37:37', '2018-07-21,11:37:48', '2018-07-21,11:37:52', '2018-07-21,11:38:12', '2018-07-21,11:38:45', '2018-07-21,11:39:04', '2018-07-21,11:39:51', '2018-07-21,11:41:36', '2018-07-21,11:41:52', '2018-07-21,11:42:01', '2018-07-21,11:42:24', '2018-07-21,11:42:27', '2018-07-21,11:43:01', '2018-07-21,11:43:56', '2018-07-21,11:44:13', '2018-07-21,11:44:24', '2018-07-21,11:45:20', '2018-07-21,11:45:32', '2018-07-21,11:45:40', '2018-07-21,11:45:51', '2018-07-21,11:46:20', '2018-07-21,11:46:36', '2018-07-21,11:49:01', '2018-07-21,11:50:12', '2018-07-21,11:50:45', '2018-07-21,11:51:16', '2018-07-21,11:51:32', '2018-07-21,11:51:47', '2018-07-21,11:52:10', '2018-07-21,11:52:13', '2018-07-21,11:52:16', '2018-07-21,11:52:19', '2018-07-21,11:53:22']
focal = ['2018-07-21,11:37:20', '2018-07-21,11:52:57']
print([*takewhile(lambda v: focal[0] < v < focal[1], stamp)][-1])
输出:
2018-07-21,11:52:19