这是我参与更文挑战的第19天,活动详情查看: 更文挑战
多维数组解析为一维数组
假如有以下一个数组,需要解析为一维数组:
[1, [2, [3, [8888,666], [4, 6, [45, 78, [99]], [45,67,89,[999,[4543,90]]]]], 45]]
变为:
[1, 2, 3, 4, 6, 45, 78, 99, 45, 67, 89, 999, 4543, 90, 45]
这里,我们这样想就很容易解决这个问题:
- 如果是列表,那么需要进一步解析
- 如果不是列表,那么就直接放入结果中 这里,看到了递归的影子了吧,对,递归,非常容易理解形象
def flatten(sample):
if isinstance(sample, list):
result = []
for item in sample:
result += flatten(item)
else:
return [sample]
return result
看看效果:
if __name__ == "__main__":
sample = [1, [2, [3, [8888, 666], [4, 6, [45, 78, [99]], [45, 67, 89, [999, [4543, 90]]]]], 45]]
print flatten(sample)
# [1, 2, 3, 8888, 666, 4, 6, 45, 78, 99, 45, 67, 89, 999, 4543, 90, 45]
这样,无论是多少维的嵌套,都可以解决。
UTC时间字符串间互转
后台开发经常需要对时间进行记录和返回时间戳给前端。
为了通用性,我们一般都会存储UTC的时间戳。
但是,一般对数据库进行时间戳字段的插入,往往是以格式化的时间字符串进行插入的,例如:
insert into table_name(user_id, login_time) values ("RidingRoad", "2018-11-13 12:19:39");
业务场景
假如前端传来了用户的某个UTC时间戳,后台需要录入数据库,当前端请求时候,返回这个UTC时间戳。
业务分析
这个UTC时间戳的状态变化:
-
前端传过来的:double型的时间戳
-
插入数据库时:格式化的时间字符串
-
返回给前端的:double型的时间戳
所以我们需要一个对时间和格式化的时间字符串进行转换的函数
转换实现
import time
# UTC 转换为 格式化的时间字符串
def u2s(utc_timestamp):
return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(utc_timestamp))
# 格式化的时间字符串 转换为 UTC
def s2u(utc_time_string):
return time.mktime(time.strptime(utc_time_string, "%Y-%m-%d %H:%M:%S"))\
- time.mktime(time.gmtime(0))
示例
if __name__ == "__main__":
# 取得当前的UTC时间戳
timestamp = time.time()
print(timestamp)
# 把UTC时间戳转换为日期格式字符串
utc_time_string = u2s(timestamp)
print(utc_time_string)
# 把日期字符串转换回UTC时间戳
utc_timestamp = s2u(utc_time_string)
print(utc_timestamp)
# 把转换后的UTC时间戳转换成日期字符串
# 看看误差,秒数也一样,一般不影响
after_conver = u2s(utc_timestamp)
print(after_conver)
结果输出
两个时间戳的误差在零点毫秒级,前后的日期格式字符串一样,一般的业务可以接受这样的误差。有更精准的方法,下面评论告诉我吧。
1542112115.95
2018-11-13 12:28:35
1542112115.0
2018-11-13 12:28:35