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 进行计时比使用 datetimes 更好(如果 OS/user 调整时钟 datetime 会给出不正确的结果,但 perf_counter 应该给出正确的持续时间)。我还建议在文件周围使用 context managers 以便它们可以适当地清理。最后,将文件列表作为参数传递将允许您在较小的文件集上进行测试,或者在不更改函数的情况下扩展列表。