繁体   English   中英

Python 3.4 TypeError:'int'类型的参数不可迭代

[英]Python 3.4 TypeError: argument of type 'int' is not iterable

我有一个数组,其中数组中的每个位置代表一个停车位。 阵列(或停车场)中每个位置的值代表停车位(汽车,摩托车等)中的内容。 showSpots函数应该显示某个车辆所在的所有点。例如,showSpots(CAR)(其中CAR = 1)应该显示保持值1的所有点(或阵列中的位置)。

但是,当我运行代码时,我得到一个'TypeError:类型'int'的参数在行上不可迭代'如果在parkingLot [x]中持有者:'

为什么我会收到此错误,我该如何解决?

我的代码:

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()

我想if holder == parkingLot[x]: . 通过这样做in ,巨蟒正试图通过迭代parkingLot[x]并检查是否holder是在里面。 显然,由于你不能做list(1) ,所以会引发错误。

parkingLot[x]是一个整数,但是in期望的序列(即列表,一个元组,一个词典等)

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

对于整数,应使用==

TerryA对错误完全正确。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM