9

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

[('this', 'is'), ('is', 'the'), ('the', 'first'), ('first', 'document'), ('document', '.')]

将每个标记用空格分隔的最pythonic和最有效的方法是什么:

['this is', 'is the', 'the first', 'first document', 'document .']
4

5 回答 5

15

非常简单:

[ "%s %s" % x for x in l ]
于 2012-07-27T21:49:53.300 回答
9

使用map()join()

tuple_list = [('this', 'is'), ('is', 'the'), ('the', 'first'), ('first', 'document'), ('document', '.')]

string_list = map(' '.join, tuple_list) 

正如inspectorG4dget 指出的那样,列表推导是最 Pythonic 的方式:

string_list = [' '.join(item) for item in tuple_list]
于 2012-07-27T21:51:26.457 回答
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']
于 2012-07-27T22:13:55.803 回答
2

我强烈建议您避免使用%s. 从 Python 3.6 开始,添加了f 字符串,因此您可以按如下方式利用此功能:

[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]
于 2021-05-20T03:15:10.797 回答
0

假设列表是:

您可以使用列表理解 + join()

li = [('this', 'is'), ('is', 'the'), ('the', 'first'), ('first', 'document'), ('document', '.')]

您需要做的就是:

[' '.join(x) for x in li]

您也可以使用map() + join()

list(map(' '.join, li))

结果 :

['this is', 'is the', 'the first', 'first document', 'document .']
于 2021-05-20T07:01:11.480 回答