python - 计算列表中可能的相同字母配对数
问题描述
我希望计算动态列表中相同字母对的数量。例如my_list = ['A','A','B','B','C','C']
,有 3 种可能的配对,A
因为 1 对有 2 个B
,第二对有 2 个C
,第三对有 2 个。以列表为例,如果有 5 个A
,则计为 2 对(2 组对A
)
为此,我编写了一些冗长且不优雅的代码,如果存在奇数元素列表,这些代码将不起作用。因此,我想知道是否有更简单易读的解决方案。
my_list = ['A','A','C','C', 'D', 'D']
total_letters = len(my_list)
unpairable_letter = 0
frequency = {}
# Count frequency of each letter in list
for letter in my_list:
frequency[letter] = frequency.get(letter, 0) + 1
for value in frequency.values():
if value == 1:
unpairable_letter += 1
if value > 2:
if value % 2 != 0:
unpairable_letter += 1
print(total_letters/2 - unpairable_letter)
解决方案
您可能可以使用groupby
fromitertools
模块查找字母组,然后获取分组的长度和 int 除以 2。defaultdict
fromcollections
模块只是一个字典,其中新键具有默认值和类型。
from itertools import groupby
from collections import defaultdict
my_list = ['A','A','C','C', 'D', 'D']
frequency = defaultdict(int)
for x, g in groupby(my_list):
frequency[x] += len(tuple(g)) // 2
frequency
# returns:
defaultdict(int, {'A': 1, 'C': 1, 'D': 1})
如果一系列连续的字母是奇数,它将向下舍入。所以5个字母是2组。
from itertools import groupby
from collections import defaultdict
my_list = ['A','A','A','A','A','C','C','D','D','C','C']
frequency = defaultdict(int)
for x, g in groupby(my_list):
frequency[x] += len(tuple(g)) // 2
frequency
# returns:
defaultdict(int, {'A': 2, 'C': 2, 'D': 1})
没有进口:
在没有导入的情况下执行此操作需要遍历列表,检查列表中的元素是否已更改,然后将长度相加。
my_list = ['A','A','A','A','A','C','C','D','D','C','C']
frequency = {}
candidate = my_list[0]
count = 0
for x in my_list:
if x == candidate:
count += 1
else:
frequency[candidate] = frequency.setdefault(candidate, 0) + count // 2
candidate = x
count = 1
frequency
# returns:
{'A': 2, 'C': 1, 'D': 1}
推荐阅读
- javascript - Selenium:获取未在“检查元素”中显示的 innerHTML 的代码源
- google-cloud-platform - 谷歌云任务队列未并行运行
- javascript - 如何从 Angular 组件中的变量显示 HTMLElement?
- java - 错误:无法在单个 dex 文件中容纳请求的类(# 方法:67451 > 65536)
- gcc - 如何更改 GCC 编译器的选项?
- docker - 在图像修剪期间,过滤器是否适用于未使用的图像或悬空图像或两者?
- mongodb - 无法将对象添加为另一个现有 JSON 对象的子字段
- http - Arduino UNO 和调制解调器 Sim800L - 发送查询参数时出现 DNS 错误
- python - 如何在 tkinter 中清除 FigureCanvasTkAgg 画布
- mongodb - Mongo kafka 连接器,解串器问题