Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python在迭代集合时从集合中删除元素_Python_Python 3.x_Set - Fatal编程技术网

python在迭代集合时从集合中删除元素

python在迭代集合时从集合中删除元素,python,python-3.x,set,Python,Python 3.x,Set,我试图在迭代时从集合中删除元素 matches = defaultdict(list) for id_a in indices: for id_b in indices: if id_a != id_b: if similar(id_a, id_b, threshold): matches[id_a] += [id_a, id_b]

我试图在迭代时从集合中删除元素

    matches = defaultdict(list)
    for id_a in indices:
        for id_b in indices:
            if id_a != id_b:
               if similar(id_a, id_b, threshold):
                    matches[id_a] += [id_a, id_b]
                    indices.difference_update({id_a, id_b})

def similar(a,b,threshold=0.7):
    return True if difflib.SequenceMatcher(None, a, b).ratio() > threshold else False

indices={'aaabbb', 'aabbb', 'aabb', 'aaa', 'bbb'}
matches = {‘aaabbb’: [‘aabb’, ‘aabbb’]}
索引
是一个集合,
相似
是一个函数,用于检查
id\u a
id\u b
是否相似,如果相似,列表
defaultdict
匹配将添加
id\u a:[id\u a,id\u b]

但我有一个错误:

RuntimeError: Set changed size during iteration

我想知道如何修复它并实现目标。

为什么要检查集合中的两个元素是否相等?一个集合中的两个元素永远不可能相等!一般规则:在迭代容器时不要更改它。在另一个集合中添加“待删除”元素,迭代完成后,只需将其从原始集合中减去即可。显示示例输入和预期输出。@CristiFati I尝试进行单次迭代,因此从
索引中删除类似的元素,然后继续迭代,直到外部循环完成为止。注意:有两个嵌套的循环是O(n**2)。还有text:将添加
id\u a:[id\u a,id\u b]
,示例
匹配={'aaabb':['aabb','aabbb']}
不完全匹配。(对我来说)还不清楚你真正想要实现什么,但你可以看看itertools。