将值添加到嵌套元组的末尾

时间:2018-03-19 13:30:11

标签: python python-3.x python-2.7 datetime

我有一个嵌套的元组:

nested_tup = [('15MAR18 103000', '15MAR18 103758'), ('15MAR18 120518', '15MAR18 121308')] etc...

每个元组中的第一个元素是开始日期,每个元组中的第二个元素是结束日期。

我想找到2个日期之间的时间差异,然后将答案作为每个元组中的第3个元素附加...到目前为止,我有以下内容:

for start, end in nested_tup:
     after = datetime.strptime(end, '%d%b%y %H%M%S')
     before = datetime.strptime(start, '%d%b%y %H%M%S')
     duration = after - before

我需要将此持续时间值作为每个元组中的第3个元素附加..我不知道如何...

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:2)

这是一种方式:

for i, (start, end) in enumerate(nested_tup):
     after = datetime.strptime(end, '%d%b%y %H%M%S')
     before = datetime.strptime(start, '%d%b%y %H%M%S')
     duration = after - before
     nested_tup[i] += (duration, )

可能会更容易阅读:

f = '%d%b%y %H%M%S'
for i, (start, end) in enumerate(nested_tup):
     nested_tup[i] += (datetime.strptime(end, f) - datetime.strptime(start, f), )

即使你不能改变tuple个对象来附加新组件,你也可以使用tuple连接+个对象,它会从成分tuple创建一个新的tuple。 1}}对象,这对你手头的问题非常有用。

答案 1 :(得分:1)

您可以将地图与转化功能结合使用。

def convert(tup):
  after = datetime.strptime(tup[1], '%d%b%y %H%M%S')
  before = datetime.strptime(tup[0], '%d%b%y %H%M%S')
  duration = after - before
  return (tup[0], tup[1], duration)

ans = list(map(convert, nested_tup))

答案 2 :(得分:0)

元组是不可变的数据结构。所以你不能将值附加到元组。 Check out immutable sequence types.

这可能适合你,

strptime = lambda dt: datetime.strptime(dt, f)
[(start, end, strptime(end) - strptime(start)) for start, end in nested_tup]