我制作了一个脚本,该脚本将每四个元素中的两个列表插入另一个列表中,但是要花很长时间才能完成。这是我的两个很长的列表:
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
你有什么主意吗?希望它清除。谢谢
这是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
这应该快得多:
cleanData = [ v for i,x,y in zip(range(0,len(cleanData),3),listOfX,listOfY)
for v in (*cleanData[i:i+3],x,y) ]
在带有发电机的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可以立即在每个块上处理其他指令,而不必等待所有内容先合并。