我有一个看起来像这样的元组列表:
[('this', 'is'), ('is', 'the'), ('the', 'first'), ('first', 'document'), ('document', '.')]
将每个标记用空格分隔的最灵活,最有效的方法是什么:
['this is', 'is the', 'the first', 'first document', 'document .']
答案 0 :(得分:13)
很简单:
[ "%s %s" % x for x in l ]
答案 1 :(得分:8)
使用map()
和join()
:
tuple_list = [('this', 'is'), ('is', 'the'), ('the', 'first'), ('first', 'document'), ('document', '.')]
string_list = map(' '.join, tuple_list)
正如督察G4dget所指出的那样,列表推导是这种方式最为诡计多端的方式:
string_list = [' '.join(item) for item in tuple_list]
答案 2 :(得分:2)
这样做:
>>> l=[('this', 'is'), ('is', 'the'), ('the', 'first'),
('first', 'document'), ('document', '.')]
>>> ['{} {}'.format(x,y) for x,y in l]
['this is', 'is the', 'the first', 'first document', 'document .']
如果你的元组长度可变(或不均匀),你也可以这样做:
>>> [('{} '*len(t)).format(*t).strip() for t in [('1',),('1','2'),('1','2','3')]]
['1', '1 2', '1 2 3'] #etc
或者,可能还是最好的:
>>> [' '.join(t) for t in [('1',),('1','2'),('1','2','3'),('1','2','3','4')]]
['1', '1 2', '1 2 3', '1 2 3 4']
答案 3 :(得分:2)
我强烈建议您避免使用 %s
。从 Python 3.6 开始,添加了 f-strings,因此您可以按如下方式利用此功能:
[f'{" ".join(e)}' for e in l]
如果您使用的是 Python 3.6 的早期版本,您还可以通过使用 %s
函数来避免使用 format
,如下所示:
print(['{joined}'.format(joined=' '.join(e)) for e in l]) # before Python 3.6
替代方案:
假设每个元组中有 2 个元素,您可以使用以下内容:
# Python 3.6+
[f'{first} {second}' for first, second in l]
# Before Python 3.6
['{first} {second}'.format(first=first, second=second) for first, second in l]