【问题标题】:Flask: cannot unpack non-iterable int object in Python listFlask:无法在 Python 列表中解压不可迭代的 int 对象
【发布时间】:2021-12-10 00:24:37
【问题描述】:

我有一个这样的列表:

my_list = []
check_values = [1, 2, 5]

str_input = "5"

my_list.append(int(str_input))

然后我尝试创建一个集合来测试一些东西:

testing = list(set(v for k, v in my_list if int(k) in check_values))

我在上面的行中收到以下错误:

Flask: cannot unpack non-iterable int object

我错过了什么吗?

【问题讨论】:

  • 所以my_list的第一个元素是一个不可迭代的int(5),因此无法解包。当你写k, v时,Python 期望列表的每个元素都是具有两个元素的可迭代(元组,列表)

标签: python python-3.x iterable


【解决方案1】:

不确定您的 for 结构中 k 变量的用法 - 它试图实现什么?

但是,在 for 中使用 k, v 通常适用于字典,而不是列表。 (除非我遗漏了什么)

只需将您的代码更新为

testing = list(set(v for v in my_list if int(v) in check_values))

【讨论】:

  • 啊,是的,我还有另一套字典,并从那里复制了代码。这就说得通了。我只学了 2 周的 Python。
  • 注意集合和字典的区别,因为这很重要。字典键实际上只是一个集合,因为它们是唯一且不可变的。
【解决方案2】:

当 Python 尝试将 my_list 的每个值“解包”到两个变量 kv 中时,生成器表达式中会发生“解包”。

看起来您可能是根据迭代 dict.items() 而不是简单的整数列表的代码改编的。

修复:

testing = list(set(v for v in my_list if int(v) in check_values))

或者使用集合联合:

testing = list(set(my_list) | check_values)

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 2021-06-06
    • 2019-04-22
    • 2020-07-21
    • 1970-01-01
    • 2020-09-22
    • 2020-07-12
    • 2020-08-15
    • 2023-03-07
    相关资源
    最近更新 更多