Python中如何使用Numpy按位置遍历序列列表的单个字符
Numpy 实现方案
你可以直接将字符串数组转换为U1类型的单字符数组,无需嵌套循环即可完成拆分:
import numpy as np a = ['AGHT','THIS','OWKF'] # 转换后shape为(3,4),对应3个字符串、每个字符串4个字符 char_arr = np.array(a, dtype='U1').view('U1')
后续遍历和统计可以直接基于该数组操作:
- 替换你当前的嵌套循环遍历所有字符:
for d in char_arr.flat: print(d) - 若要按位置取所有序列的对应字符(比如所有序列的第0位、第1位),直接按列索引即可:
char_arr[:, 0]会返回['A', 'T', 'O'],可直接对接numpy统计API计算各位置字符丰度,无需额外循环。
其他可行实现方案
原生Python实现(无额外依赖)
如果不需要用到numpy的后续计算能力,用原生方法也可以高效实现需求:
- 平铺遍历所有字符:
from itertools import chain a = ['AGHT','THIS','OWKF'] for d in chain.from_iterable(a): print(d) - 按位置分组取所有序列的对应字符:
运行后输出:# 遍历每个位置的所有字符,输出格式为(第0位所有字符, 第1位所有字符...) for pos_chars in zip(*a): print(pos_chars)('A', 'T', 'O') ('G', 'H', 'W') ('H', 'I', 'K') ('T', 'S', 'F')
内容的提问来源于stack exchange,提问作者Morvolis
相关产品推荐
相关产品推荐

