gpt4 book ai didi

python - 使用索引列表访问项目列表

转载 作者:太空狗 更新时间:2023-10-29 20:20:35 25 4
gpt4 key购买 nike

考虑从大型 csv 文件 (80 MB) 返回的大量命名项目列表(第一行),其中可能存在间断的间距

name_line =  ['a',,'b',,'c' .... ,,'cb','cc']

我正在逐行读取剩余的数据,我只需要处理具有相应名称的数据。数据可能看起来像

data_line =  ['10',,'.5',,'10289' .... ,,'16.7','0']

我尝试了两种方法。一个是从读取的每一行中弹出空列

blnk_cols = [1,3, ... ,97]
while data:
...
for index in blnk_cols: data_line.pop(index)

另一个正在编译与 L1 中的名称关联的项目

good_cols = [0,2,4, ... ,98,99]   
while data:
...
data_line = [data_line[index] for index in good_cols]

在我使用的数据中,好的线肯定会比坏线多,尽管它可能高达一半和一半。

我使用 cProfile 和 pstats 包来确定速度上最薄弱的环节,这表明 pop 是当前最慢的项目。我切换到 list comp,时间几乎翻了一番。

我认为一种快速的方法是对数组进行切片以仅检索有效数据,但对于交替包含空白数据和有效数据的文件来说,这会很复杂。

我真正需要的是能够做到

data_line = data_line[good_cols]

有效地将索引列表传递到列表中以取回这些项目。现在我的程序运行一个 10 MB 的文件大约需要 2.3 秒,而 pop 大约需要 0.3 秒。

有没有更快的方法来访问列表中的某些位置。在 C 中,它只是取消引用指向数组中正确索引的指针数组。

添加:读取前文件中的 name_line

a,b,c,d,e,f,g,,,,,h,i,j,k,,,,l,m,n,

读取和拆分后的 name_line(",")

['a','b','c','d','e','f','g','','','','','h','i','j','k','','','','l','m','n','\n']

最佳答案

尝试生成器表达式,

data_line = (data_line[i] for i in good_cols)

另请阅读此处有关 Generator Expressions vs. List Comprehension

正如最佳答案告诉您的那样:“基本上,如果您所做的只是迭代一次,则使用生成器表达式”。

所以你应该从中受益。

关于python - 使用索引列表访问项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9008533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com