【问题标题】:Error calling two zip functions in succession连续调用两个 zip 函数时出错
【发布时间】:2020-01-08 00:33:35
【问题描述】:

我有两个列表,id 和 name,我想将它们压缩在一起并以两种不同的方式输出它们。第一种方法分离 zip 元组并在字符串中输出 ID 以及相应的名称。第二种方式应该只输出 zip 元组本身。

当我运行这段代码时,第一个 for 循环在收到以下错误之前执行:

Traceback (most recent call last):

File "c:\Users\Alan\Desktop\test.py", line 7, in <module> for item in zip(id,name):

TypeError: zip argument #1 must support iteration

令人困惑的部分是,如果我注释掉一个 for 循环并单独运行另一个,我可以成功运行每个循环。由于传入的两个参数都是可迭代列表,我不确定为什么错误说第一个参数必须支持迭代。任何帮助表示赞赏。

id=[117,234,821,257,265,489]
name=['john','max','aaron','jim','sierra','kat']

for id, name in zip(id,name):
    print(f'ID {id} is associated with {name}')

for item in zip(id,name):
    print(item)

【问题讨论】:

  • 您只是在name 旁边的循环中使用您的变量名称id 隐藏列表名称id。因此,它不会运行。另外,我建议使用与id 不同的名称,因为id 已经是一个Python 函数。见这里:docs.python.org/3/library/functions.html#id

标签: python python-3.x list zip


【解决方案1】:
# just change the first for loop variable name to something other than id
id=[117,234,821,257,265,489]
name=['john','max','aaron','jim','sierra','kat']

for idx, name in zip(id,name):
    print(f'ID {idx} is associated with {name}')

for item in zip(id,name):
    print(item)

【讨论】:

  • 我试过了,虽然它消除了错误,但它没有返回我想要的输出。第一个 for 循环运行良好并打印出所有名称和 ID,但第二个仅打印 (117, 'k')、(234, 'a') 和 (821, 't')。看起来第二个 for 循环正在使用前 3 个 id 并将它们与最终名称的 3 个字符一起压缩。
  • @Alan 将列表名称“name”更新为“names”或“name1”,然后上述代码按预期工作。避免使用python的内置函数名。
【解决方案2】:

问题是您在第一个 for 循环中用于变量和列表的名称相同,因此当您在第二个 for 循环中再次调用 id 和 name 时,这些名称引用变量而不是列表。以下示例应该可以工作。 (也避免使用 id ,因为它是 python 的内置函数,如前所述。)

ids=[117,234,821,257,265,489]
names=['john','max','aaron','jim','sierra','kat']

for idx, name in zip(ids,names):
    print(f'ID {idx} is associated with {name}')

for item in zip(ids,names):
    print(item)

【讨论】:

  • 感谢您的回复,但第二个 for 循环无法使用此代码正常运行。请参阅我对@sk11 的其他回复,了解发生的情况。
  • 也许你犯了一些拼写错误,第二个 for 循环运行正常,这是我的输出: ID 117 is associated with john ID 234 is associated with max ID 821 is associated with aaron ID 257与 jim 相关联 ID 265 与 sierra 相关联 ID 489 与 kat (117, 'john') (234, 'max') (821, 'aaron') (257, 'jim') (265, 'sierra') 相关联) (489, 'kat')
猜你喜欢
  • 2018-07-29
  • 2023-03-06
  • 2015-02-25
  • 2012-02-21
  • 2015-07-02
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
相关资源
最近更新 更多