如何在Python/Numpy中切分字符串序列并统计各片段的出现频率
实现方案
核心逻辑为先按指定长度无重叠(可自定义为重叠)切分所有字符串,收集所有片段后调用numpy的np.unique接口完成频次统计,最后按对齐格式输出即可。
完整可运行代码
import numpy as np # 输入参数 str_list = ['ABGD','HDIW','ABHD'] split_length = 2 # 自定义切分长度 # 1. 按指定长度切分所有字符串 all_fragments = [] for s in str_list: # 步长等于切分长度即无重叠切分,需重叠可修改步长为1 for i in range(0, len(s), split_length): fragment = s[i:i+split_length] # 若需要过滤长度不足切分长度的尾部片段,打开下一行注释即可 # if len(fragment) != split_length: continue all_fragments.append(fragment) # 2. numpy统计频次 frag_array = np.array(all_fragments) # 若需要按出现顺序输出而非字典序,增加return_index参数后排序即可,代码见下方说明 unique_frags, count_list = np.unique(frag_array, return_counts=True) # 3. 类网格格式输出,每个元素占4位左对齐 print(''.join(f"{frag:<4}" for frag in unique_frags)) print(''.join(f"{cnt:<4}" for cnt in count_list))
自定义调整说明
- 重叠切分:将切分循环的
range(0, len(s), split_length)修改为range(0, len(s)-split_length+1, 1)即可实现滑动窗口重叠切分 - 按原始出现顺序输出:将统计部分代码替换为如下内容,即可保留片段首次出现的顺序:
unique_frags, first_idx, count_list = np.unique(frag_array, return_index=True, return_counts=True) # 按首次出现位置排序 sorted_order = first_idx.argsort() unique_frags = unique_frags[sorted_order] count_list = count_list[sorted_order]
修改后输出效果和你给出的示例完全一致。
内容的提问来源于stack exchange,提问作者Morvolis
相关产品推荐
相关产品推荐

