首页 > 解决方案 > 将长度为 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 ]

我搜索了其他答案,但还没有找到类似的问题。建议非常感谢!

标签: pythonnumpymatrix

解决方案


一个简单的双循环就可以了

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)

推荐阅读