将混合数据类型的元组列表转换为所有字符串

时间:2014-03-01 11:19:56

标签: python string list python-2.7 tuples

我有这个清单;

List=[(1, 'John', 129L, 37L), (2, 'Tom', 231L, 23L)]

我想将其转换为这样;

OutputList = [('1', 'John', '129', '37'), ('2', 'Tom', '231', '23')]

列表中的所有数据类型都将变为字符串。我试过了[str(i) for i in List],但结果并不正确。解决这个问题的正确方法是什么?

我正在使用python 2.7

2 个答案:

答案 0 :(得分:7)

使用nested list comprehensiongenerator expression内部):

>>> lst = [(1, 'John', 129L, 37L), (2, 'Tom', 231L, 23L)]
>>> [tuple(str(x) for x in xs) for xs in lst]
[('1', 'John', '129', '37'), ('2', 'Tom', '231', '23')]

或使用map代替生成器表达式:

>>> [tuple(map(str, xs)) for xs in lst]
[('1', 'John', '129', '37'), ('2', 'Tom', '231', '23')]

上面的列表推导类似于嵌套for循环:

>>> result = []
>>> for xs in lst:
...     temp = []
...     for x in xs:
...         temp.append(str(x))
...     result.append(tuple(temp))
...
>>> result
[('1', 'John', '129', '37'), ('2', 'Tom', '231', '23')]

答案 1 :(得分:1)

你也可以用这个:

>>> lst
[(1, 'John', 129L, 37L), (2, 'Tom', 231L, 23L)]
>>> map(lambda x: tuple(map(lambda i: str(i), x)), lst)
[('1', 'John', '129', '37'), ('2', 'Tom', '231', '23')]

修改:在内部地图中将lambda i: str(i)替换为str

>>> map(lambda t: tuple(map(str, t)), lst)
[('1', 'John', '129', '37'), ('2', 'Tom', '231', '23')]