将列表转换为纯文本的最快方法?

时间:2013-10-20 14:53:20

标签: python python-2.7

我需要将一系列列表转换为由空格分隔的单行文本

def Function(lists):
    Numbers= str(len(lists))+ " "
    for item in lists:
        for items in item:
            Numbers = Numbers + str(items) +'  ' 
    print Numbers

Data = [[1,2,3],[10,20,30]]
Function(Data)

这应该返回“2 1 2 3 10 20 30” 然而,这种方法非常缓慢。

有没有办法更快地完成这项工作?

3 个答案:

答案 0 :(得分:3)

您正在每个+运算符上创建一个新字符串,这非常慢(当应用很多时)。而是使用str.join的生成器表达式:

In [11]: from itertools import chain

In [12]: data = [[1,2,3],[10,20,30]]

In [13]: " ".join(str(i) for i in chain(*data))
Out[13]: '1 2 3 10 20 30'

编辑:

您可以使用所需的方法和方法附加列表长度,因为它不会影响性能:

" ".join((str(len(data)), " ".join(str(i) for i in chain(*data)))

EDIT2:

hcwhsa pointed out that generator expression has no advantage with str.join。因此,您可能希望使用列表推导而不是生成器表达式。

答案 1 :(得分:2)

对我来说这是最简单的:

>>> data = [[1,2,3],[10,20,30]]
>>> " ".join([str(item) for var in data for item in var])
'1 2 3 10 20 30'

所以你可以像这样编写你的函数:

def fun(data):
    return " ".join([str(item) for var in data for item in var])

我不知道这是否是您的错误,但如果您想将列表的长度添加为第一个数字,那么您可以执行以下操作:

def fun(data):
    return str(len(data)) + ' ' + " ".join([str(item) for var in data for item in var])

答案 2 :(得分:1)

请考虑使用字符串的join方法

def Function(lists):
    data = " ".join(j for i in lists for j in i))
    return " ".join([len(lists), data])