合并列表列表

时间:2011-10-25 20:28:10

标签: python list merge

如何合并列表列表?

[['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I']]

['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']

如果我可以在合并列表之前在每个项目的开头和结尾添加一个值,那就更好了。

即,最终结果是:

['<tr>A</tr>', '<tr>B</tr>', '<tr>C</tr>', '<tr>D</tr>', '<tr>E</tr>', '<tr>F</tr>', '<tr>G</tr>', '<tr>H</tr>', '<tr>I</tr>']

4 个答案:

答案 0 :(得分:8)

不要使用sum(),加入列表的速度很慢。

相反,nested list comprehension将起作用:

>>> x = [['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I']]
>>> [elem for sublist in x for elem in sublist]
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
>>> ['<tr>' + elem + '</tr>' for elem in _]

使用itertools.chain的建议也很好。

答案 1 :(得分:2)

要连接列表,您可以使用sum

values = sum([['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I']], [])

要添加HTML标记,您可以使用列表推导。

html_values = ['<tr>' + i + '</tr>' for i in values]

答案 2 :(得分:2)

import itertools

print [('<tr>%s</tr>' % x) for x in itertools.chain.from_iterable(l)]

你可以使用sum,但我认为这有点难看,因为你必须传递[]参数。正如雷蒙德指出的那样,它也会很昂贵。所以不要使用总和。

答案 3 :(得分:0)

使用itertools.chain

>>> import itertools
>>> list(itertools.chain(*mylist))
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']

然后可以在HTML中包装元素。

>>> ['<tr>' + x + '</tr>' for x in itertools.chain(*mylist)]
['<tr>A</tr>', '<tr>B</tr>', '<tr>C</tr>', '<tr>D</tr>', '<tr>E</tr>', '<tr>F</tr>',
'<tr>G</tr>', '<tr>H</tr>', '<tr>I</tr>']

请注意,如果您尝试生成有效的HTML,则可能还需要HTML escape字符串中的某些内容。