Skip to main content
 首页 » 编程设计

python之为什么 Python 无法识别集合中的元素

2025年05月04日25daizhj

我正在尝试从一组字符串中删除元素,但未找到它们。 该集生成为卡住集(由超出问题范围的库生成),我将其转换为常规集。

>>> geneset = model.reactions[2915].genes 
>>> geneset 
frozenset(['YGL080W', 'YGR243W', 'YHR162W', 'AND', 'OR']) 
>>> geneset_mutable = set(geneset) 
>>> geneset_mutable 
set(['YGR243W', 'OR', 'YGL080W', 'AND', 'YHR162W']) 
>>> 'OR' in geneset_mutable 
False 
>>> "OR" in geneset_mutable 
False 
>>> geneset_mutable.remove('OR') 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
KeyError: 'OR' 

集合是可编辑的:

>>> geneset_mutable.add('OR') 
>>> "OR" in geneset_mutable 
True 
>>> geneset_mutable.remove('OR') 
>>> "OR" in geneset_mutable 
False 
>>> geneset_mutable 
set(['YGR243W', 'AND', 'YHR162W', 'OR', 'YGL080W']) 
>>> geneset_mutable.remove('OR') 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
KeyError: 'OR' 

为什么找不到元素? 有什么特别的方法可以对此进行调试吗?

备案:

>>> sys.getdefaultencoding() 
python -V 
Python 2.7.5 

请您参考如下方法:

如果你直接输入集合,它工作正常:

geneset_mutable = set(['YGR243W', 'OR', 'YGL080W', 'AND', 'YHR162W']) 
>>> "OR" in geneset_mutable 
True 

我得出的结论是 model.reactions[2915].genes 没有返回字符串,它返回的基因的 repr 看起来像“OR”但是是不同类型的对象(与您的查询不匹配的一个)。

这很容易确认,只需运行这样的测试:

for gene in geneset: 
    if repr(gene) == 'OR': 
       print repr(gene) 
       print type(gene) 
       print gene == 'OR' 

解决方案是创建一个可以与集合成员完全匹配的基因对象。你如何做到这一点取决于你的模型是如何实现的,但它应该看起来像这样:

>>> geneset = model.reactions[2915].genes 
>>> Gene('OR') in geneset 
True 

希望这能让您回到完成基因分析的道路上:-)