如何加速或替换嵌套循环
How to speed up or replace the nested loops
请问有没有其他方法可以加速或替换嵌套循环?
我正在尝试从 excel 文件中捕获数据,每个 "A, B, C, D" 行有 66 行数据
import xlwings as xw
import glob as glob
import itertools
letters = ['A','B','C','D']
for i in range(66):
for j in range(len(letters)):
sht1 = wb.sheets['Pallet Configurations']
val = (sht1.range(letters[j] + str(i+2)).options(numbers=str).value)
valueList[j].append(val)
我尝试使用 itertools.product 但它不起作用。
for i, j in itertools.product(66,len(letters)):
sht1 = wb.sheets['Pallet Configurations']
val = (sht1.range(letters[j] + str(i+2)).options(numbers=str).value)
valueList[j].append(val)
我不确定您使用哪个库来操作看起来像工作簿的内容,但是您不需要每次都在内部 for 循环中设置 sht1
。您的代码可以写成:
sht1 = wb.sheets['Pallet Configurations']
letters = ['A','B','C','D']
for i in range(66):
for j in range(len(letters)):
val = (sht1.range(letters[j] + str(i+2)).options(numbers=str).value)
valueList[j].append(val)
这样您就不必每次都在 wb
上调用 .sheets
。此外,看起来您使用的任何库都可以一次读取一系列单元格。在进入内部循环之前读取整行一次可能会更便宜。然后,您可以利用 Python 的 List.extend()
方法将整个单元格列表添加到 valueList
.
示例代码可能如下所示:
sht1 = wb.sheets['Pallet Configurations']
letters = ['A','B','C','D']
for i in range(66):
for j in range(len(letters)):
letter = str(letters[j])
vals = (sht1.range("{0}{1}{0}{2}".format(letter, "2:", "66").options(numbers=str).value)
valueList[j].extend(val)
虽然这仍然不完美,但可能还有其他方法可以加快循环速度。您需要考虑尽量减少循环中所做的事情。
请问有没有其他方法可以加速或替换嵌套循环?
我正在尝试从 excel 文件中捕获数据,每个 "A, B, C, D" 行有 66 行数据
import xlwings as xw
import glob as glob
import itertools
letters = ['A','B','C','D']
for i in range(66):
for j in range(len(letters)):
sht1 = wb.sheets['Pallet Configurations']
val = (sht1.range(letters[j] + str(i+2)).options(numbers=str).value)
valueList[j].append(val)
我尝试使用 itertools.product 但它不起作用。
for i, j in itertools.product(66,len(letters)):
sht1 = wb.sheets['Pallet Configurations']
val = (sht1.range(letters[j] + str(i+2)).options(numbers=str).value)
valueList[j].append(val)
我不确定您使用哪个库来操作看起来像工作簿的内容,但是您不需要每次都在内部 for 循环中设置 sht1
。您的代码可以写成:
sht1 = wb.sheets['Pallet Configurations']
letters = ['A','B','C','D']
for i in range(66):
for j in range(len(letters)):
val = (sht1.range(letters[j] + str(i+2)).options(numbers=str).value)
valueList[j].append(val)
这样您就不必每次都在 wb
上调用 .sheets
。此外,看起来您使用的任何库都可以一次读取一系列单元格。在进入内部循环之前读取整行一次可能会更便宜。然后,您可以利用 Python 的 List.extend()
方法将整个单元格列表添加到 valueList
.
示例代码可能如下所示:
sht1 = wb.sheets['Pallet Configurations']
letters = ['A','B','C','D']
for i in range(66):
for j in range(len(letters)):
letter = str(letters[j])
vals = (sht1.range("{0}{1}{0}{2}".format(letter, "2:", "66").options(numbers=str).value)
valueList[j].extend(val)
虽然这仍然不完美,但可能还有其他方法可以加快循环速度。您需要考虑尽量减少循环中所做的事情。