python - 如何在python中创建一个以参数为条件的嵌套列表
问题描述
我已经生成了一个按日嵌套的列表,并且想要计算登录和注销会话之间的总持续时间,并将该值单独存储在一个持续时间嵌套列表中,按登录发生的日期组织。
我的python脚本是:
import datetime
import itertools
Logintime = [
datetime.datetime(2021,1,1,8,10,10),
datetime.datetime(2021,1,1,10,25,19),
datetime.datetime(2021,1,2,8,15,10),
datetime.datetime(2021,1,2,9,35,10)
]
Logouttime = [
datetime.datetime(2021,1,1,10,10,11),
datetime.datetime(2021,1,1,17,0,10),
datetime.datetime(2021,1,2,9,30,10),
datetime.datetime(2021,1,2,17,30,12)
]
Logintimedaywise = [list(group) for k, group in itertools.groupby(Logintime,
key=datetime.datetime.toordinal)]
Logouttimedaywise = [list(group) for j, group in itertools.groupby(Logouttime,
key=datetime.datetime.toordinal)]
print(Logintimedaywise)
print(Logouttimedaywise)
# calculate total duration
temp = []
l = []
for p,q in zip(Logintimedaywise,Logouttimedaywise):
for a,b in zip(p, q):
tdelta = (b-a)
diff = int(tdelta.total_seconds()) / 3600
if diff not in temp:
temp.append(diff)
l.append(temp)
print(l)
此脚本生成以下输出(变量l
中的持续时间作为单例列表中的平面列表出现):
[[datetime.datetime(2021, 1, 1, 8, 10, 10), datetime.datetime(2021, 1, 1, 10, 25, 19)], [datetime.datetime(2021, 1, 2, 8, 15, 10), datetime.datetime(2021, 1, 2, 9, 35, 10)]]
[[datetime.datetime(2021, 1, 1, 10, 10, 11), datetime.datetime(2021, 1, 1, 17, 0, 10)], [datetime.datetime(2021, 1, 2, 9, 30, 10), datetime.datetime(2021, 1, 2, 17, 30, 12)]]
[[2.000277777777778, 6.5808333333333335, 1.25, 7.917222222222223]]
但我想要的输出格式是以下嵌套的持续时间列表(列表中的每个项目都应该是给定登录日的持续时间列表):
[[2.000277777777778, 6.5808333333333335] , [1.25, 7.917222222222223]]
任何人都可以帮助我如何根据登录日将总持续时间存储为嵌套列表?
提前致谢。
解决方案
尝试改变这种和平的代码:
# calculate total duration
temp = []
l = []
for p,q in zip(Logintimedaywise,Logouttimedaywise):
for a,b in zip(p, q):
tdelta = (b-a)
diff = int(tdelta.total_seconds()) / 3600
if diff not in temp:
temp.append(diff)
l.append(temp)
print(l)
至:
# calculate total duration
l = []
for p,q in zip(Logintimedaywise,Logouttimedaywise):
l.append([])
for a,b in zip(p, q):
tdelta = (b-a)
diff = int(tdelta.total_seconds()) / 3600
if diff not in l[-1]:
l[-1].append(diff)
print(l)
那么输出将是:
[[datetime.datetime(2021, 1, 1, 8, 10, 10), datetime.datetime(2021, 1, 1, 10, 25, 19)], [datetime.datetime(2021, 1, 2, 8, 15, 10), datetime.datetime(2021, 1, 2, 9, 35, 10)]]
[[datetime.datetime(2021, 1, 1, 10, 10, 11), datetime.datetime(2021, 1, 1, 17, 0, 10)], [datetime.datetime(2021, 1, 2, 9, 30, 10), datetime.datetime(2021, 1, 2, 17, 30, 12)]]
[[2.000277777777778, 6.5808333333333335], [1.25, 7.917222222222223]]
我为每次迭代添加一个新的子列表。
推荐阅读
- c++ - c++ 在基类类型的向量中调用子类方法
- python - Plotly Dash:如何在按钮单击时更改图像
- javascript - 您如何根据无线电输入的输入总结一个变量?
- typescript - 如何防止 Vetur 和 TypeScript 在 VSCode 中同时显示打字稿警告?
- c# - 在 Xamarin Forms FlowListView 中加载无限项
- ethereum - 如何使用 Chainlink Imports 验证通过 Remix 部署的合约?
- python - docker login --username AWS --password-stdin https://
.dkr.ecr。 .amazonaws.com 以错误代码 1 退出: - c# - Web API 控制器中多个 HttpPost 方法的共享逻辑
- html - HTML/CSS - 如何向href'd 图像添加文本?
- python-3.x - 为 requests.get 的每个新迭代更改文件名(文件下载到机器)