Преобразовать строку в битовый массив - PullRequest
0 голосов
/ 11 декабря 2018

Как я могу создать функцию 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]

В идеале, я бы также мог искать символы не в алфавите, как, например, ! и ?, ипросто добавьте другие биты в массив для представления этих символов.

Любая помощь будет приветствоваться!Спасибо за тонну.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Почему бы не создать простой словарь сопоставлений

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]
0 голосов
/ 11 декабря 2018

Очень простой способ создать такой список:

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!?"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...