如何在Python中将多级列表转换为字符串列表?

16

我有一个列表,看起来像这样:

a = [('A', 'V', 'C'), ('A', 'D', 'D')]

我想创建另一个列表,将a转换为:

['AVC', 'ADD']

我该如何继续进行?

3个回答

33

在列表推导式中使用 str.join()(在Python 2.x和3.x中都适用):

>>> a = [('A', 'V', 'C'), ('A', 'D', 'D')]
>>> [''.join(x) for x in a]
['AVC', 'ADD']

22
你可以将str.join映射到a中的每个tuple
Python 2:
>>> map(''.join, a)
['AVC', 'ADD']

在Python 3中,map是一个可迭代对象,因此您需要将其实例化为list

>>> list(map(''.join, a))
['AVC', 'ADD']

在我的机器上返回一个映射对象。 - vaultah

6
使用reduce是另一种选择:
>>> a = [('A','V','C'), ('A','D','D')]

在Python 2中:

>>> [reduce(lambda x, y: x + y , i) for i in a]
['AVC', 'ADD']

在Python 3中(感谢Eugene的建议):
>>> from functools import reduce
>>> [reduce(lambda x, y: x + y , i) for i in a]
['AVC', 'ADD']

3
虽然这是一种效率非常低下的选择。 - chepner
3
在Python3中,您需要使用from functools import reduce - Eugene Yarmash
1
你可以用 operator.concat 替换你的 lambda。 - njzk2
@chepner 源代码?为什么会不那么高效呢?无论如何,你仍然需要将元素相加。 - njzk2
2
因为你正在重复调用一个用户定义的函数(例如,将lambda替换为operator.itemgetter以处理sortedkey参数),并且为每个字符分配一个新的Python str对象。join接受字符串列表,为结果分配一个单一字符串对象,并使用其输入填充它。(也就是说,所有操作都在C级别完成,而不是在Python级别完成)。 - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接