如何有效地将数据附加到列表列表?

时间:2015-07-12 22:19:00

标签: python list csv

我有一个列表,只有两百万个元素,每个元素有7个条目。

我对数据运行机器学习算法,并希望将分类结果附加到每个元素的末尾。

我使用.append()功能,例如

for j in range(len(data)):
    data[j].append(results[j])

但是,这需要花费很多时间(8小时以上,但仍未终止)。

我想知道是否有更有效的方法来做到这一点。数据是从CSV文件读入的,所以我可以将结果直接写入CSV吗?

我正在考虑使用numpy数组,但我记得有人说列表更快。

有人有什么想法吗?

编辑:这是我的代码

import csv

    with open("measles_data_b", 'r') as f:

        reader = csv.reader(f)

        t = list(reader)

 ### Perform the machine Learning.  That bit works fine.
 #At this point, t is a list with size=1971203, and each element in t has 7 elements of its own
 # results is a list with the same number of elements.  Its entries are
 # one of three things: '1','2','0'.

 for j in range(len(t)):
     t[j].append(results[j])

1 个答案:

答案 0 :(得分:0)

作为实验,请运行以下代码:

import random

def append_items(lists, items):
    for i in range(len(lists)):
        lists[i].append(items[i])

rand_lists = [[random.randint(0,9) for i in range(7)] for j in range(2000000)]
rand_list = [random.randint(0,9) for i in range(2000000)]

print("Lists generated")
append_items(rand_lists,rand_list)
print("Lists appended")

当我运行它时,我需要等待20-30秒才能看到“生成的列表”已打印,但下一次打印几乎是即时的。如果你没有得到这种行为,那么你有一个错误的Python安装。如果不是 - 很难说发生了什么。看看type(t[0])可能有趣的是,你可能有一个类似列表的对象列表,而不是列表列表,你的类似列表的对象实现了一个低效的追加方法(我还没有使用它,但似乎至少可能csv.reader返回某种自定义对象)。