【问题标题】:TypeError: argument of type 'int' is not iterable in indexingTypeError:“int”类型的参数在索引中不可迭代
【发布时间】:2020-05-31 05:10:42
【问题描述】:

为什么我的代码打印:TypeError: 'int' 类型的参数是不可迭代的,每当我运行它时?我在下面给出了以下列表。我要做的是获取O中的元素,然后在J中找到它的匹配项。找到匹配项后,就获得了索引。使用这个索引,我会在R中找到它对应的值。

    J = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    R = [[0, 0], [4, 3], [2, 0], [2, 1], [0, 3], [1, 1], [1, 2], [2, 1], [0, 3], [2, 2], [0, 0]]
    O = J[0]

    R_demand = [d for a, d in zip(J, R) if a in O]
    print(R_demand)

对于上面的代码,由于 J 中的 O = 1,我应该得到 R_demand = [0, 0] 作为我的答案。列表中的所有值都是整数。

【问题讨论】:

    标签: python-3.x zip typeerror


    【解决方案1】:

    当您将条件 a 写入 o 时,o 应该是一个可迭代序列,在您的情况下是一个数字。所以,它会产生一个错误( int 是不可迭代的)。

    【讨论】:

    • 我尝试更改 O = {4, 3, 1, 7} 时的代码,但我得到一个空括号作为答案。
    • 您好,我似乎遇到了错误。 O 中的元素可以变化。 O = {1} 或可以是 {3, 6, 9}。我怎样才能把它适应我的列表理解的条件部分?
    【解决方案2】:

    你是对的,O == 1。这就是为什么列表理解的条件部分if a in O 会引发 TypeError。 in 操作需要一个iterable 跟随它,1 是一个常量(不可迭代),所以a in 1 是无效的。如果 O 始终是整数,只需将 in 更改为 ==,如下所示:

    R_demand = [d for a, d in zip(J, R) if a == O]
    

    但更好的做法是确保O 是一个可交互对象,如集合或列表。如果您在下面的评论中使用O = {1}O = {3, 6, 9},那么您应该能够像以前一样使用in。你试过吗?

    希望对您有所帮助,祝您编码愉快!

    【讨论】:

    • 如果O变成不同J值的列表怎么办?例如,O = {3, 6, 9}。为什么我得到一个空括号作为输出?
    • 您好,我似乎遇到了错误。 O 中的元素可以变化。 O = {1} 或可以是 {3, 6, 9}。我怎样才能把它适应我的列表理解的条件部分?
    • 我更新了我的答案。简而言之,如果您确保 O 是可迭代的,例如列表或集合,那么使用 in 应该可以像原来一样工作!
    • 您好! O 的内容在我的代码的不同部分发生了变化。为了说明它变成整数的时间,我在理解列表之前包含了 if isinstance 。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 2011-10-04
    • 2019-08-24
    • 2020-05-07
    相关资源
    最近更新 更多