How to resolve the Error: zip argument #2 must support iteration in Python
How to resolve the Error: zip argument #2 must support iteration in Python
我是 python 的新手。我有一个 returns 数组的函数。我想打印它。这是我的代码。
import importlib
from datetime import datetime
from BST import BinarySearchTree
bst = BinarySearchTree()
def bst_build():
#bst_list = importlib.import_module("BST").BinarySearchTree()
bst11 = importlib.import_module("BST").BinarySearchTree()
bst12 = importlib.import_module("BST").BinarySearchTree()
bst13 = importlib.import_module("BST").BinarySearchTree()
bst21 = importlib.import_module("BST").BinarySearchTree()
bst22 = importlib.import_module("BST").BinarySearchTree()
bst23 = importlib.import_module("BST").BinarySearchTree()
bst_list = [bst11, bst12, bst13, bst21, bst22, bst23]
return bst_list
def bst_insert():
text_files = ["insert_set1_data_1.txt",
"insert_set1_data_2.txt",
"insert_set1_data_3.txt",
"insert_set2_data_1.txt",
"insert_set2_data_2.txt",
"insert_set2_data_3.txt"]
bst_list = bst_build()
time = []
for file, bst in zip(text_files, bst_list):
data = open(file, 'r')
Lines = data.readlines()
start = datetime.now()
for line in Lines:
val = int(line.strip())
bst.insert(val)
end = datetime.now()
duration = end - start
time.append(duration.microseconds)
return time
为了打印输出,我使用了以下方法。
res= bst_insert()
print("Time is".format(res))
但是它给了我一个错误,'zip argument #2 must support iteration'。我该如何解决这个错误?
据我所知,您不想让 bst
可迭代,您只想追加到同一个对象中。
例如:
from time import perf_counter
from BST import BinarySearchTree
def bst_insert_files(filenames):
bst = BinarySearchTree()
time = []
for filename in filenames:
with open(filename) as fd:
lines = fd.readlines()
start = perf_counter()
for line in lines:
val = int(line.strip())
bst.insert(val)
dt = perf_counter() - start
time.append(dt * 1e6)
return bst, time
text_files = [
"insert_set1_data_1.txt",
"insert_set1_data_2.txt",
"insert_set1_data_3.txt",
"insert_set2_data_1.txt",
"insert_set2_data_2.txt",
"insert_set2_data_3.txt",
]
bst, time = bst_insert_files(text_files)
print(time)
我已经清理了一些东西:你导入的 BST
看起来很奇怪(你不需要 import
和使用 importlib
);使用 perf_counter
进行计时比使用 datetime
s 更好(如果 OS/user 调整时钟 datetime
会给出不正确的结果,但 perf_counter
应该给出正确的持续时间)。我还建议在文件周围使用 context managers 以便它们可以适当地清理。最后,将文件列表作为参数传递将允许您在较小的文件集上进行测试,或者在不更改函数的情况下扩展列表。
我是 python 的新手。我有一个 returns 数组的函数。我想打印它。这是我的代码。
import importlib
from datetime import datetime
from BST import BinarySearchTree
bst = BinarySearchTree()
def bst_build():
#bst_list = importlib.import_module("BST").BinarySearchTree()
bst11 = importlib.import_module("BST").BinarySearchTree()
bst12 = importlib.import_module("BST").BinarySearchTree()
bst13 = importlib.import_module("BST").BinarySearchTree()
bst21 = importlib.import_module("BST").BinarySearchTree()
bst22 = importlib.import_module("BST").BinarySearchTree()
bst23 = importlib.import_module("BST").BinarySearchTree()
bst_list = [bst11, bst12, bst13, bst21, bst22, bst23]
return bst_list
def bst_insert():
text_files = ["insert_set1_data_1.txt",
"insert_set1_data_2.txt",
"insert_set1_data_3.txt",
"insert_set2_data_1.txt",
"insert_set2_data_2.txt",
"insert_set2_data_3.txt"]
bst_list = bst_build()
time = []
for file, bst in zip(text_files, bst_list):
data = open(file, 'r')
Lines = data.readlines()
start = datetime.now()
for line in Lines:
val = int(line.strip())
bst.insert(val)
end = datetime.now()
duration = end - start
time.append(duration.microseconds)
return time
为了打印输出,我使用了以下方法。
res= bst_insert()
print("Time is".format(res))
但是它给了我一个错误,'zip argument #2 must support iteration'。我该如何解决这个错误?
据我所知,您不想让 bst
可迭代,您只想追加到同一个对象中。
例如:
from time import perf_counter
from BST import BinarySearchTree
def bst_insert_files(filenames):
bst = BinarySearchTree()
time = []
for filename in filenames:
with open(filename) as fd:
lines = fd.readlines()
start = perf_counter()
for line in lines:
val = int(line.strip())
bst.insert(val)
dt = perf_counter() - start
time.append(dt * 1e6)
return bst, time
text_files = [
"insert_set1_data_1.txt",
"insert_set1_data_2.txt",
"insert_set1_data_3.txt",
"insert_set2_data_1.txt",
"insert_set2_data_2.txt",
"insert_set2_data_3.txt",
]
bst, time = bst_insert_files(text_files)
print(time)
我已经清理了一些东西:你导入的 BST
看起来很奇怪(你不需要 import
和使用 importlib
);使用 perf_counter
进行计时比使用 datetime
s 更好(如果 OS/user 调整时钟 datetime
会给出不正确的结果,但 perf_counter
应该给出正确的持续时间)。我还建议在文件周围使用 context managers 以便它们可以适当地清理。最后,将文件列表作为参数传递将允许您在较小的文件集上进行测试,或者在不更改函数的情况下扩展列表。