Type error: For循环中整数与列表比较报错的解决方法
错误根因
运行代码触发整数和列表比较的TypeError,是两个逻辑错误共同导致的:
- 遍历
passenger_time.values()得到的元素是两个完整列表:分别是存储所有乘客编号的passenger列表、存储所有对应耗时的timelist列表,直接用整数15、40和整个列表做大小比较,不符合Python语法规则,必然触发类型错误。 - 循环内使用了从未定义的变量
y,即便比较逻辑修复,运行到格式化输出步骤也会触发NameError。
修正方案
你的核心需求是将乘客编号和对应的耗时一一匹配,判断耗时是否落在(15,40)区间内,输出对应乘客的核验结果,直接用zip()将两个等长列表打包配对遍历即可,逻辑最简洁:
from random import randint passenger = list(range(1, 51)) timelist = [] for i in range(1, 51): n = randint(15, 51) timelist.append(n) # 同步遍历配对的乘客ID、对应耗时 for p_id, cost_time in zip(passenger, timelist): if 15 < cost_time < 40: print(f'passenger {p_id} accepted') else: print(f'passenger {p_id} not accepted')
如果需要保留你定义的passenger_time字典结构,也可以通过索引同步取两个列表的配对元素实现:
from random import randint passenger = list(range(1, 51)) timelist = [] for i in range(1, 51): n = randint(15, 51) timelist.append(n) passenger_time = {'passenger': passenger, 'timelist': timelist} for idx in range(len(passenger_time['passenger'])): p_id = passenger_time['passenger'][idx] cost_time = passenger_time['timelist'][idx] if 15 < cost_time < 40: print('passenger {} accepted'.format(p_id)) else: print('passenger {} not accepted'.format(p_id))
补充说明:不建议用
from random import *的导入方式,会污染当前命名空间,直接导入需要用到的randint方法即可。
内容的提问来源于stack exchange,提问作者Han J
相关产品推荐
相关产品推荐

