Python执行缓慢

问题描述 投票:0回答:2

我制作了一个脚本,该脚本将每四个元素中的两个列表插入另一个列表中,但是要花很长时间才能完成。这是我的两个很长的列表:

listOfX = ['567','765','456','457','546'....] len(383656)
listOfY = ['564','345','253','234','123'....] len(383656)

还有另一个列表,其中包含一些数据,我想在其中添加其他列表的数据:

cleanData = ['2020-04-28T01:44:59.392043', 'c57', '0', '2020-04-28T01:44:59.392043', 'c57', '1'....] len(1145146)

这里是我想要的:

cleanData = ['2020-04-28T01:44:59.392043', 'c57', '0', 567, 564, '2020-04-28T01:44:59.392043', 'c57', '1', 765, 345]

最后,这是我的代码:

  ## ADDING X AND Y TO ORIGINAL LIST
  addingValue = True
  valueItem = ""
  loopValue = 3
  xIndex = 0
  yIndex = 0
  print(len(listOfX))

  while addingValue:

    if xIndex > len(listOfX):
      break

    try:
      cleanData.insert(loopValue, listOfY[yIndex])
      cleanData.insert(loopValue, listOfX[xIndex])

    except IndexError:
      addingValue = False
      break

    xIndex += 1
    yIndex += 1
    loopValue += 5

你有什么主意吗?希望它清除。谢谢

python list
2个回答
2
投票

这是Shelister建议的实现:

tmp = []
n = min(len(listOfX), len(listOfY), len(cleanData)//3)
for i in range(n):
   tmp.extend(cleanData[3*i : 3*i+3])
   tmp.append(listOfX[i])
   tmp.append(listOfY[i])
cleanData = tmp

1
投票

这应该快得多:

cleanData = [ v for i,x,y in zip(range(0,len(cleanData),3),listOfX,listOfY) 
                for v in (*cleanData[i:i+3],x,y) ]

0
投票

在带有发电机的Blotometek上构建,您将执行以下操作:

def get_next_group():
    n = min(len(listOfX), len(listOfY), len(cleanData)//3)
    for i in range(n):
        tmp = cleanData[3*i : 3*i+3]
        tmp.append(listOfX[i])
        tmp.append(listOfY[i])

        yield tmp

#in you main code:

for x in get_next_group():
    #do something with x
    pass

上面代码的优点是,仅根据您的要求逐个进行组合。如果您对其进行处理,并且不将其存储在内存中的列表中,则可以减少内存开销。由于您不再受内存限制,因此CPU可以立即在每个块上处理其他指令,而不必等待所有内容先合并。

© www.soinside.com 2019 - 2024. All rights reserved.