python列表元素偶数之和函数_在列表中的偶数和奇数元素上传递两个不同的函数...

我想在列表上传递两个不同的函数。一个用于奇数元素,另一个用于偶数元素。

列表如下所示:

lst = [2856064, 5819, 2856936, 8557, 2858224, 7744, 2859392, 8333, 2859718, 7588, 2860220, 10556, 2861336, 9298, 2863080, 6912, 2865340, 7929, 2866040, 9513, 2866350, 7828, 2867228, 10795, 2868044, 12431, 2869740, 8922, 2870080, 10792, 2870392, 7382, 2871584, 6873, 2872800, 7271, 2873864, 6776, 2875664, -1, 2876294, 8495]

对于偶数元素,我想将其转换为UTC格式的时间戳。我当前的代码:[datetime.utcfromtimestamp((time+21564000)*60).strftime('%Y%m%d') for time in lst[::2]]另一方面,除非存在-1,否则偶数元素保持不变,返回0。我的当前代码:

[0 if tag==-1 else tag for tag in lst[1::2]]

另外,我也只想获取“ 20160618”之后的信息。也就是说,我的预期结果看起来像这样[20160618, 7271, 20160618, 6776, 20160619, 0, 20160620, 8495]

ps有可能一次完成列表理解吗?

解决方案

您可以使用enumerate()和% 2与三元表达式一起执行任何操作-使用max(x,0)-1可以将0替换为-1,因为-1是获得的唯一负值:

from datetime import datetime

lst = [2856064, 5819, 2856936, 8557, 2858224, 7744, 2859392, 8333, 2859718,

7588, 2860220, 10556, 2861336, 9298, 2863080, 6912, 2865340, 7929, 2866040,

9513, 2866350, 7828, 2867228, 10795, 2868044, 12431, 2869740, 8922, 2870080,

10792, 2870392, 7382, 2871584, 6873, 2872800, 7271, 2873864, 6776, 2875664,

-1, 2876294, 8495]

k = [datetime.utcfromtimestamp((x+21564000)*60).strftime('%Y%m%d')

if i%2 == 0 else max(0,x) for i,x in enumerate(lst)]

print(k)

输出:

['20160606', 5819, '20160606', 8557, '20160607', 7744, '20160608', 8333,

'20160608', 7588, '20160609', 10556, '20160610', 9298, '20160611', 6912,

'20160612', 7929, '20160613', 9513, '20160613', 7828, '20160614', 10795,

'20160614', 12431, '20160615', 8922, '20160616', 10792, '20160616', 7382,

'20160617', 6873, '20160618', 7271, '20160618', 6776, '20160619', 0,

'20160620', 8495]

要获得20160618之后的零件,请获取其索引并将其切片:

b = k[ k.index('20160618'):]

print(b) # ['20160618', 7271, '20160618', 6776, '20160619', 0, '20160620', 8495]

您的日期字符串格式正确,可用于词典比较,'20170101'然后-因此'20161231',您可以使用词典比较在“不在列表中的日期”之后找到“日期”:

t= ['20160606', 5819, '20160606', 8557, '20160607', 7744, '20160608', 8333,

'20160608', 7588, '20160609', 10556, '20160610', 9298, '20160611', 6912,

'20160612', 7929, '20160613', 9513, '20160613', 7828, '20160614', 10795,

'20160614', 12431, '20160615', 8922, '20160616', 10792, '20160616', 7382,

'20160617', 6873, '20160618', 7271, '20160618', 6776, '20160619', 0,

'20160620', 8495, '20170618', 7271, '20180618', 7271,]

index = 0

for idx, k in enumerate(t):

if idx % 2 == 0 and k > "20160620":

index = idx

break

print(t[index:]) # ['20170618', 7271, '20180618', 7271]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值