Python 如何将函数应用于元组中每个元组中特定位置的元素?

Python 如何将函数应用于元组中每个元组中特定位置的元素?,python,python-2.7,tuples,Python,Python 2.7,Tuples,我有这个元组的元组 Tuple = ( ('AA', 'BB', datetime.datetime(2014, 3, 2, 0, 0) ), ('CC', 'DD', datetime.datetime(2014, 3, 2, 0, 1) ) ) 我想把它改成这样 Output= ( ('AA', 'BB', '2014-3-2 00:00:00' ), ('CC', 'DD', '2014-3-2 00:00:00' ) 每个元组的第三个元素将转换为表示日期时间的字符串。这可以通过类

我有这个元组的元组

Tuple = ( ('AA', 'BB', datetime.datetime(2014, 3, 2, 0, 0) ), ('CC', 'DD', datetime.datetime(2014, 3, 2, 0, 1) )  )
我想把它改成这样

Output= ( ('AA', 'BB', '2014-3-2 00:00:00' ), ('CC', 'DD', '2014-3-2 00:00:00'  )
每个元组的第三个元素将转换为表示日期时间的字符串。这可以通过类似这样的
元组[0][2]来完成。strftime(“%Y-%m-%d%H:%m:%S”)


我遇到的问题是如何将这个函数strftime()应用于这个元组中每个元组的第三个元素?

您必须再次生成元组。您可以使用以下列表来执行此操作

>>> [(a, b, date.strftime('%Y-%m-%d %H:%M:%S')) for (a, b, date) in Tuple]
[('AA', 'BB', '2014-03-02 00:00:00'), ('CC', 'DD', '2014-03-02 00:01:00')]
import datetime

if __name__ == '__main__':
    nested_tuples = (('AA', 'BB', datetime.datetime(2014, 3, 2, 0, 0)),
                     ('CC', 'DD', datetime.datetime(2014, 3, 2, 0, 1)))

    output = tuple((a, b, time.strftime('%Y-%m-%d %H:%M:%S')) 
                   for a, b, time in nested_tuples)

    print(output)
如果最终结果需要是一个元组,请使用
tuple()
。这一个使用生成器表达式,但其工作原理基本相同:

>>> tuple((a, b, date.strftime('%Y-%m-%d %H:%M:%S')) for (a, b, date) in Tuple)
(('AA', 'BB', '2014-03-02 00:00:00'), ('CC', 'DD', '2014-03-02 00:01:00'))

如@msvalkon所述,或使用
map
lambda
列出理解:

In [731]: map(lambda tup: (tup[0], tup[1], tup[2].strftime('%Y-%m-%d %H:%M:%S')), Tuple)
Out[731]: [('AA', 'BB', '2014-03-02 00:00:00'), ('CC', 'DD', '2014-03-02 00:01:00')]
这是一个能起作用的方法

import datetime

def convert_nested(nested_tuples):
    for a, b, time in nested_tuples:
        yield (a, b, time.strftime('%Y-%m-%d %H:%M:%S'))

if __name__ == '__main__':
    nested_tuples = (('AA', 'BB', datetime.datetime(2014, 3, 2, 0, 0)),
                     ('CC', 'DD', datetime.datetime(2014, 3, 2, 0, 1)))

    output = tuple(convert_nested(nested_tuples))

    print(output)
或者更简洁地说,作为一个生成器

>>> [(a, b, date.strftime('%Y-%m-%d %H:%M:%S')) for (a, b, date) in Tuple]
[('AA', 'BB', '2014-03-02 00:00:00'), ('CC', 'DD', '2014-03-02 00:01:00')]
import datetime

if __name__ == '__main__':
    nested_tuples = (('AA', 'BB', datetime.datetime(2014, 3, 2, 0, 0)),
                     ('CC', 'DD', datetime.datetime(2014, 3, 2, 0, 1)))

    output = tuple((a, b, time.strftime('%Y-%m-%d %H:%M:%S')) 
                   for a, b, time in nested_tuples)

    print(output)

@哦,我也是这么建议的P