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。