【问题标题】:Python 3.4 TypeError: argument of type 'int' is not iterablePython 3.4 TypeError:“int”类型的参数不可迭代
【发布时间】:2015-10-30 21:49:41
【问题描述】:

我有一个数组,其中数组中的每个位置都代表一个停车位。数组(或停车场)中每个位置的值表示停车位(汽车、摩托车等)中有什么。 showSpots 函数应显示特定车辆所在的所有位置。例如,showSpots(CAR)(其中 CAR = 1)应显示所有值为 1 的位置(或数组中的位置)。

但是,当我运行代码时,我在“if holder in parkLot[x]:”行上得到一个“TypeError:'int'类型的参数不可迭代'”

为什么会出现此错误,我该如何解决?

我的代码:

from random import *

parkingLot = [0, 1, 0, 2, 0, 0, 1]

EMPTY = 0
CAR = 1
MOTORCYCLE = 2

def showSpots(holder):
    for x in range(0, 6):
        if holder in parkingLot[x]:
            print(x)

def main():
    print("There are cars in lots:")
    showSpots(CAR)
    print("There are motorcycles in lots:")
    showSpots(MOTORCYCLE)

main()

【问题讨论】:

    标签: python arrays


    【解决方案1】:

    我想你想要if holder == parkingLot[x]:。通过执行in,Python 试图遍历parkingLot[x] 并检查holder 是否在其中。显然,既然你不能做list(1),那么就会引发错误。

    【讨论】:

    • @ZacharyB48265 没问题。一定要接受答案:)
    【解决方案2】:

    parkingLot[x] 是单个整数,但 in 需要一个序列(即列表、元组、字典等)

    【讨论】:

      【解决方案3】:

      应该是if holder == parkingLot[x]。当您使用 in 时,这意味着您正在搜索序列中的某些内容,即列表、元组或字典。

      对于整数,应使用==

      【讨论】:

        【解决方案4】:

        TerryA 关于这个错误是完全正确的。

        在 Python 中,您可以通过使用内置函数来处理列表和其他可迭代对象而不是直接操作列表,从而大大降低此类错误的可能性。

        在这种情况下,您可以使用列表推导来为您构建数据集。例如:

        def showSpots(holder):
          for space in [ index for index,value in enumerate(parkingLot) if value == holder ]:
            print (space)
        

        enumerate 函数会将您的输入转换为索引/值对,您可以使用它来构建仅包含您关心的数据的列表。因为您永远不需要直接操作您的输入列表,所以无需担心列表大小,也不会混合可迭代和不可迭代值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-26
          • 1970-01-01
          • 2022-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多