Python中如何对比列表I1与I2并生成符合条件的结果?
错误原因
你的代码报错是因为在列表推导式里,i <= I2这一步是拿I1里的单个整数和整个I2列表做比较,Python不允许整数和列表直接用<=判断大小,所以抛出了TypeError。
需求实现
你要的是对I1里的每个元素,筛选出I2中所有小于等于它的元素,再把这些筛选结果按顺序拼成嵌套列表。直接用嵌套列表推导式就能搞定:
I1 = [1, 4, 5, 8] I2 = [2, 3, 5, 6] result = [[x for x in I2 if x <= num] for num in I1] print(result)
代码说明
- 外层循环遍历I1的每个元素
num - 内层循环遍历I2的每个元素
x,只保留满足x <= num的项 - 运行后输出就是你期望的:
[[], [2, 3], [2, 3, 5], [2, 3, 5, 6]]
如果I2是有序的,还可以用bisect模块优化效率(比如找到第一个大于num的元素位置,直接切片),但对于小规模数据,上面的写法足够简单直观。
内容的提问来源于stack exchange,提问作者user20072488
相关产品推荐
相关产品推荐

