如何合并列表列表?
[['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>']
答案 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)
>>> 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字符串中的某些内容。