6

如何合并列表列表?

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

进入

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

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

即,最终结果将是:

['<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

4 回答 4

9

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

相反,嵌套列表理解将起作用:

>>> 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的建议也很好。

于 2011-10-25T20:36:16.650 回答
3
import itertools

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

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

于 2011-10-25T20:30:53.383 回答
2

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

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

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

html_values = ['<tr>' + i + '</tr>' for i in values]
于 2011-10-25T20:29:40.290 回答
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 转义。

于 2011-10-25T20:29:15.853 回答