python - 将长度为 n 的字符串转换为 nx len(alphabet) 的矩阵
问题描述
假设给定一个String
"AABCD"
长度为 n = 5 的长度为alphabet
{'A', 'B', 'C', 'D', 'E', 'F'}
len(alphabet) = 6 的长度。将这个字符串转换为 5 x 6 矩阵的 Pythonic 方法是什么?
IE。
#INPUT:
string = "AABCD"
alphabet = {'A', 'B', 'C', 'D', 'E', 'F'}
#OUTPUT
output =
A B C D E F
char 1[ 1 0 0 0 0 0 ]
char 2[ 1 0 0 0 0 0 ]
char 3[ 0 1 0 0 0 0 ]
char 4[ 0 0 1 0 0 0 ]
char 5[ 0 0 0 1 0 0 ]
我搜索了其他答案,但还没有找到类似的问题。建议非常感谢!
解决方案
一个简单的双循环就可以了
string = "AABCD"
alphabet = ['A', 'B', 'C', 'D', 'E', 'F']
matrix = [[0 for _ in range(len(alphabet))] for _ in range(len(string))]
for i, s in enumerate(string):
for j, a in enumerate(alphabet):
matrix[i][j] = 1 if s == a else 0
print(matrix)
输出将是
[
[1, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0]
]
它也可以通过itertools.product完成,但它看起来不像 for 循环那么干净。
import itertools
string = "AABCD"
alphabet = ['A', 'B', 'C', 'D', 'E', 'F']
string_iter = zip(list(range(len(string))), string)
alphabet_iter = zip(list(range(len(alphabet))), alphabet)
matrix = [[0 for _ in range(len(alphabet))] for _ in range(len(string))]
for (i, s), (j, a) in itertools.product(string_iter, alphabet_iter):
matrix[i][j] = 1 if s == a else 0
print(matrix)
推荐阅读
- regex - Notepad ++:如何删除除包含句点的所有字符串
- javascript - 有没有办法获得实际的 css 列宽度和间隙?
- django - 聊天套接字(网络套接字)意外关闭(django-channels)?
- html - Angular 8:无法从 Rest Api 获取消息
- jenkins - 带参数的waitForQualityGate
- c# - 如何修复“解码时发现无效数据”。
- javascript - fs.writeFile 不是一个函数 Electron/React
- jquery - 动态更改输入标签
- ios - 如何在 UITextView 中禁用垂直滚动?
- javascript - 每次点击后间隔变得越来越短