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

Ben*_*rup 16 python list

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

a = [('A', 'V', 'C'), ('A', 'D', 'D')]
Run Code Online (Sandbox Code Playgroud)

我想创建另一个转换a为:

['AVC', 'ADD']
Run Code Online (Sandbox Code Playgroud)

我将如何继续这样做?

Eug*_*ash 33

使用str.join()列表中的理解(工作在Python 2.x和3.x两者):

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


Pet*_*ood 22

你可以映射str.join到每个tuplea:

Python 2:

>>> map(''.join, a)
['AVC', 'ADD']
Run Code Online (Sandbox Code Playgroud)

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

>>> list(map(''.join, a))
['AVC', 'ADD']
Run Code Online (Sandbox Code Playgroud)


Qui*_*inn 6

使用reduce是另一种选择:

>>> a = [('A','V','C'), ('A','D','D')]
Run Code Online (Sandbox Code Playgroud)

在Python 2中:

>>> [reduce(lambda x, y: x + y , i) for i in a]
['AVC', 'ADD']
Run Code Online (Sandbox Code Playgroud)

在Python 3中(感谢eugene的建议):

>>> from functools import reduce
>>> [reduce(lambda x, y: x + y , i) for i in a]
['AVC', 'ADD']
Run Code Online (Sandbox Code Playgroud)

  • 但是,这是一个非常低效的选择. (3认同)
  • 在Python3中,你需要`来自functools import reduce`. (3认同)
  • 因为你是1)重复调用一个用户定义的函数(比如将`lambda`替换为`operator.itemgetter`,比如'key`参数替换为`sorted`)和2)每次分配一个新的Python`str`对象对于每个角色.`join`获取字符串列表,为结果分配*single*字符串对象,并使用其输入填充它.(也就是说,一切都在C级完成,而不是在Python级别完成). (2认同)