python在for循环中迭代多个值

python在for循环中迭代多个值,python,Python,我的for循环在args中为value1和value2设置了,该循环失败,我不确定原因 def school_completion(*args): """ If any of the subjects have one or more incomplete testlet, the whole school is incomplete. :param args: tuple of 7 strs Should come as: (E

我的for循环在args中为value1和value2设置了
,该循环失败,我不确定原因

def school_completion(*args):
    """
    If any of the subjects have one or more incomplete testlet, the whole school is
    incomplete.

    :param args: tuple of 7 strs
        Should come as:
        (Eligible Students,
        ELA Required,
        ELA Completed,
        Math Required,
        Math Completed,
        Science Required,
        Science Completed)
    :return: str
    """
    # If there are no eligible students, return a dash.
    if args[0] == '0':
        return '-'

    # Set a boolean trigger.
    complete = True

    # Check for each subject pair.
    for required,completed in args[1:]:
        if required != completed:
            complete = False

    return 'Complete' if complete else 'Follow Up'

school_completion('1','6','6','7','7','8','8')
这给了我一个错误
ValueError:没有足够的值来解包(预期为2,得到1)
,这似乎是在
处发生的,以args[1://完成


我还尝试让我的函数接受
(arg,*args)
(从而避免了切分元组时的任何错误)。这也没用。

args
是一个元组。只能逐个迭代元组:

for el in args[1:]:
   # Do something...
您只能在ceratin环境下迭代多个项目,例如:

d = {'one': 1, 'two': 2}
for key, value in d.items():
    # Do something...
字典的
items
方法返回一个特殊的
dict\u items
对象,该对象可以像这样迭代。你不能只处理任何东西,它甚至对元组都没有意义


如果您想更具体地说,对象在被迭代时的行为取决于它在其
\uuuuu iter\uuuuu
方法中返回的迭代器,以及该迭代器在其
\uuuuuu next\uuu
方法中返回的内容。如果它只返回一个值,如元组中的值,则无法将其解压为多个值。在上面的示例中,
dict\uuu items
在迭代时返回一个2项元组,因此可以解包。

在序列中解包项要求序列中的每个项都是一个iterable,它生成的项数与接收值的表达式所期望的项数相同。您可以使用
zip
函数在按奇数和偶数索引对项目进行切片后,对序列中的项目进行配对

更改:

for required,completed in args[1:]:
致:


在循环过程中,您希望
required
completed
具有哪些值?这是常见的错误消息。每当您看到它时,它通常是在一个循环中,您希望在每次迭代中设置两个或多个变量,而列表并没有提供您期望的数据分组。请注意这一点和解决方案,因为随着您的进步,您会看到很多这一点。谢谢,有了这样的理解,我将args切换为[args]以成为一个iterable。实际上,
args
已经是一个iterable了——正如前面提到的,元组是一个iterable,但它一次只允许对一个项进行迭代。迭代
[args]
意味着您要迭代一个列表,该列表的唯一元素是args,因此循环只运行一次,您将得到的项目将是所有args。如果我不清楚,我很抱歉,我建议从更好的在线资源中阅读python循环和迭代,因为有很多关于这方面的信息。是的,我实际上意识到列表也不起作用(我认为它起作用了,因为我的函数默认返回“complete”)。现在,我只是显式地指定了每个参数,而不是使用*args。
for required, completed in zip(args[1::2], args[2::2]):