You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何两段逻辑相似的Python代码一段正常一段触发TypeError?

问题解惑:循环中set.intersection报错的原因与解决方法

问题重现

第一段代码(注释掉循环)可正常运行:

import numpy as np

MC = 100_000
N, P = 107, 14
rpp = 15  # Roles per person
R = 2     # The correct role
boxes = np.arange(N)


len_interstct_1try = []
#  for _ in range(MC):
split_roles = [set(np.random.choice(boxes, size=rpp, replace=False)) for _ in range(P)]
intrsctn = set.intersection(*[r for r in split_roles if R in r])
len_interstct_1try.append(len(intrsctn))

但添加for循环后,运行时触发如下错误:

len_interstct_1try = []
for _ in range(MC):
    split_roles = [set(np.random.choice(boxes, size=rpp, replace=False)) for _ in range(P)]
    intrsctn = set.intersection(*[r for r in split_roles if R in r])
    len_interstct_1try.append(len(intrsctn))

错误信息:

File "<ipython-input-46-49ef6704b64c>", line 4, in <module>
    intrsctn = set.intersection(*[r for r in split_roles if R in r])
TypeError: unbound method set.intersection() needs an argument

报错原因

核心问题是筛选后的集合列表可能为空:

  • 第一段代码只运行一次,碰巧[r for r in split_roles if R in r]这个列表里至少有一个集合,set.intersection能正常接收参数执行。
  • 循环跑10万次时,必然会出现某次随机生成的split_roles里没有任何集合包含R的情况,此时筛选后的列表是空的,set.intersection(*[])相当于没有传入任何参数,而set.intersection作为类方法,必须至少传入一个集合实例才能执行,因此触发TypeError。

解决方法

只需要先判断筛选后的列表是否为空,为空时直接返回空集合即可:

len_interstct_1try = []
for _ in range(MC):
    split_roles = [set(np.random.choice(boxes, size=rpp, replace=False)) for _ in range(P)]
    filtered_roles = [r for r in split_roles if R in r]
    # 处理空列表的情况
    if filtered_roles:
        intrsctn = set.intersection(*filtered_roles)
    else:
        intrsctn = set()
    len_interstct_1try.append(len(intrsctn))

或者用更简洁的三元表达式写法:

len_interstct_1try = []
for _ in range(MC):
    split_roles = [set(np.random.choice(boxes, size=rpp, replace=False)) for _ in range(P)]
    filtered_roles = [r for r in split_roles if R in r]
    intrsctn = set.intersection(*filtered_roles) if filtered_roles else set()
    len_interstct_1try.append(len(intrsctn))

内容的提问来源于stack exchange,提问作者semola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:50:15