python - 比较两个不同的 python 计数器对象

标签 python algorithm comparison counter string-comparison

我正在使用 Python 开发一种算法,该算法将接受用户输入并告诉他们需要将哪些新字母添加到字符串中以使其成为不同的字符串,并且我一直在尝试使用Counter 方法创建的字典。

我想比较两个不同的字典,它们计算字符串中的字母(比如使用集合模块中的计数器工具返回的对象)。我们可以称这些字典为 D1 和 D2。我希望有两个结果字典(R1 和 R2),第一个是两者之间的共享字母,第二个是将 R1 变成 R2 所需的字母(D2 中但不在 D1 中的字母)。

例如:

# assuming they’ve been converted from counter objects into regular 
dictionaries #

D1 = {‘A’: 2, ‘B’: 1, ‘C’: 4, ‘D’: 5}
D2 = {‘A’: 3, ‘B’: 4, ‘C’ : 4, ‘D’: 7}

# Some sort of comparison function executed here #

结果:

R1={‘A’: 2, ‘B’: 3, ‘C’: 4, ‘D’: 5} 
R2 = {‘A’: 1, ‘B’: 1, ‘C’: 0 , ‘D’: 2} 

最佳答案

如果共享字母是指计数器交集,则可以使用 & 运算符和将 R1 转换为 R2 所需的字母数量> 可以看作是区别:

from collections import Counter

D1 = Counter({'A': 2, 'B': 1, 'C': 4, 'D': 5})
D2 = Counter({'A': 3, 'B': 4, 'C': 4, 'D': 7})

R1 = D1 & D2

print(R1)  # intersection:  min(c[x], d[x])
print(D2 - D1)  # subtract (keeping only positive counts)

输出

Counter({'D': 5, 'C': 4, 'A': 2, 'B': 1})
Counter({'B': 3, 'D': 2, 'A': 1})

如果你想保留负数,你可以这样做:

from collections import Counter

D1 = Counter({'A': 2, 'B': 1, 'C': 4, 'D': 5, 'E': 5})
D2 = Counter({'A': 3, 'B': 4, 'C': 4, 'D': 7, 'E': 3})

R2 = Counter({key: D2.get(key, 0) - value for key, value in D1.items()})
print(R2)

输出

Counter({'B': 3, 'D': 2, 'A': 1, 'C': 0, 'E': -2})

在上面的例子中 'E' : -2 因为 ED1 中的计数是 5D2 中的 3注意:所有示例均使用 Python 3.5。

关于python - 比较两个不同的 python 计数器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52323957/

相关文章:

linux - bash中的整数比较错误

比较两个列表并打印出差异的 Pythonic 方法

python - 如何保存 PIL ImageGrab() img?

python - 在numpy数组中查找最大元素的索引,不包括少数索引

python - PyParsing:如何解析函数调用并将其作为字符串返回

algorithm - 我应该如何在 3D 场景中指定矩形?

sql - Microsoft SQL 'not like' 与 <>

python - 写入文本时 Tkinter 在 MacOs 上不刷新

algorithm - 使用 Lua 的 BFS 算法找到 2 个节点之间的最短路径

算法:计算每个更新查询的不同排序子序列的最小数量