如何创建需要
的Python函数[0, 0, ... 0]
(字母的每个字母一个零)并返回
因此,如果一个单词有一个'A'
或'a'
并且数组的第一个点对应于'a'
,则输出数组的第一个点将有一个1
点:
[1, ...]
如果一个单词具有'B'
或'b'
,则输出数组的第二个位置将具有1
。如果一个单词有一个'a'
和一个'b'
,则输出数组的第一和第二个位置将有一个1
:
[1, 1, ...]
以此类推。因此,字符串"abba"
的结果如下:
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
理想情况下,我也可以搜索字母之外的字符,例如!
和?
,只需在数组中添加其他位以表示这些字符即可。
任何帮助都将受到欢迎!多谢。
答案 0 :(得分:2)
创建此类列表的一种非常简单的方法是:
def string_to_bit_array(text):
# We don't care if upper or lower case
text = text.lower()
# Remove duplicate alphabet characters
text = set(text)
# Define alphabet characters
alphabet = "abcdefghijklmnopqrstuvwxyz"
# Create list with zeros
matches = [0] * len(alphabet)
# Loop over every character of the text
for character in text:
# Skip this character if not in alphabet
if not character in alphabet:
continue
# Find index of character in alphabet
index = alphabet.find(character)
# Set match index to one instead of zero
matches[index] = 1
# Return result
return matches
print(string_to_bit_array("abba"))
此打印:
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
如果需要,您可以在alphabet
中添加更多字符:
alphabet = "abcdefghijklmnopqrstuvwxyz!?"
答案 1 :(得分:2)
为什么不创建一个简单的映射字典
import string
alphabet=string.ascii_lowercase
d=dict(zip(alphabet,range(0,26)))
a=[0]*26
字典看起来像这样
{'a': 0,
'b': 1,
'c': 2,
'd': 3,
'e': 4,
'f': 5,
'g': 6,
'h': 7,
'i': 8,
'j': 9,
'k': 10,
'l': 11,
'm': 12,
'n': 13,
'o': 14,
'p': 15,
'q': 16,
'r': 17,
's': 18,
't': 19,
'u': 20,
'v': 21,
'w': 22,
'x': 23,
'y': 24,
'z': 25}
查找和更新列表的逻辑
for i in set('aabbc?'):
index_to_update=d.get(i,None)
if index_to_update is not None:
a[index_to_update]=1
print(a)#[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]