Python实现忽略数字统计唯一值并生成类化学式输出
解决思路及代码实现
你之前用np.unique(lst)的问题在于,它只是对原列表里的元素去重,得到的是['A1','A2','B'],拼接后自然不是想要的化学式格式。要实现需求,得按以下步骤来:
- 提取每个元素的字母部分:把列表里每个元素的数字去掉,只保留字母,比如
A1、A2都转成A。 - 统计每个字母的出现次数:数清楚A和B各出现多少次。
- 按化学式格式拼接结果:次数为1时只写字母,次数大于1时字母后面跟次数。
完整代码
from collections import Counter lst = ['A1', 'A2', 'B', 'B', 'B', 'B'] # 提取每个元素的纯字母部分 cleaned_elements = [''.join([c for c in item if c.isalpha()]) for item in lst] # 统计各字母出现次数 element_counts = Counter(cleaned_elements) # 拼接成化学式格式 formula = '' for elem, count in element_counts.items(): formula += elem if count == 1 else f"{elem}{count}" print(formula) # 输出:AB4
代码说明
- 列表推导式结合
str.isalpha()过滤掉元素中的数字,得到纯字母列表['A','A','B','B','B','B']。 Counter工具可以快速统计每个字母的出现次数,这里得到Counter({'A':2, 'B':4})。- 最后遍历统计结果,按规则拼接成目标格式的字符串。
内容的提问来源于stack exchange,提问作者fatemeh haddadi
相关产品推荐
相关产品推荐

