0

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

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”但是这种方法非常慢。

有没有办法更快地做到这一点?

4

3 回答 3

4

您正在为每个+运算符创建一个新字符串,这非常慢(大量应用时)。而是使用生成器表达式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)))

编辑2:

hcwhsa 指出生成器表达式与str.join. 因此,您可能想要使用列表推导而不是生成器表达式。

于 2013-10-20T14:56:13.497 回答
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])
于 2013-10-20T15:06:51.500 回答
1

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

def Function(lists):
    data = " ".join(j for i in lists for j in i))
    return " ".join([len(lists), data])
于 2013-10-20T14:58:47.503 回答