首页 > 解决方案 > 如何在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]]

任何人都可以帮助我如何根据登录日将总持续时间存储为嵌套列表?

提前致谢。

标签: pythonpython-3.xlistnested-lists

解决方案


尝试改变这种和平的代码:

# 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]]

我为每次迭代添加一个新的子列表。


推荐阅读