Как сделать go через список без циклов - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь go выдать список под названием message, это простое слово и закодировать его.

У меня также есть словарь под названием symbol_code_table, в котором есть код для каждого буква в слове.

Примерно так:

symbol_code_table = {'a': '011', 'b': '10', 'c': '010', 'd': '00', 'n': '11'}
message = "caba"

Таким образом, результат будет примерно таким:

010 011 10 011

Ниже я покажу функцию, которая делает это

def encode_huff (message , symbol_code_table):

    binary_code = ''

    for i in message:
      if (i in symbol_code_table):
        binary_code += symbol_code_table[i] 

Я хотел бы знать, есть ли другой способ go через сообщение без необходимости использовать for loop

Большое спасибо заранее!

Ответы [ 4 ]

3 голосов
/ 24 апреля 2020

Вы, конечно, можете с функциональной парадигмой, здесь используется map:

binary_code = "".join(map(lambda s: symbol_table.get(s, ""), message))
1 голос
/ 25 апреля 2020

Мое решение:

binary_code = ' '.join(list(map(lambda s: symbol_code_table.get(s),message)))

0 голосов
/ 24 апреля 2020

Вообще я бы сказал нет. Вам необходимо посетить каждый элемент хотя бы один раз, чтобы закодировать его, что всегда приводит к некоторой форме a для l oop, как бы хорошо вы его ни писали.

Если вам это нужно, только чтобы избежать " для ключевого слова "в коде python используйте хвостовую рекурсию.

Если вы ищете ускорение, вы можете разбить сообщение на куски, закодировать их в параллельные потоки, а затем объединить результаты в правильном порядке, чтобы получить полное закодированное сообщение.

0 голосов
/ 24 апреля 2020

Я хотел бы знать, есть ли другой способ go через сообщение без необходимости использовать для l oop.

Вместо этого вы можете использовать понимание списка:

binary_code = ''.join([symbol_code_table[i] for i in message])

Обратите внимание, что это все еще oop. Другими словами, бегать не эффективнее. Синтаксис просто намного лаконичнее.

...