python在for循环中迭代多个值
我的for循环在args中为value1和value2设置了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
,该循环失败,我不确定原因
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]):