Как добавить строки в список?

1

Поэтому я пытаюсь добавить строки двоичных файлов в список, но вместо этого я добавляю каждый отдельный символ. Я новичок в python, поэтому я не совсем уверен, как это сделать сам (также при получении строк мне нужно игнорировать пробелы между каждой строкой двоичного кода)

str_msg = "This is a message!"
final = ' '.join(format(ord(x), 'b') for x in str_msg)
print(final)

который дает:

1010100 1101000 1101001 1110011 100000 1101001 1110011 100000 1100001 100000 1101101 1100101 1110011 1110011 1100001 1100111 1100101 100001

но затем я пытаюсь создать список таким образом:

binlist = []
for value in final:
    binlist.append(value)
print(binlist)

Я получил:

['1', '0', '1', '0', '1', '0', '0', ' ', '1', '1', '0', '1', '0', '0', '0', ' ', '1', '1', '0', '1', '0', '0', '1', ' ', '1', '1', '1', '0', '0', '1', '1', ' ', '1', '0', '0', '0', '0', '0', ' ', '1', '1', '0', '1', '0', '0', '1', ' ', '1', '1', '1', '0', '0', '1', '1', ' ', '1', '0', '0', '0', '0', '0', ' ', '1', '1', '0', '0', '0', '0', '1', ' ', '1', '0', '0', '0', '0', '0', ' ', '1', '1', '0', '1', '1', '0', '1', ' ', '1', '1', '0', '0', '1', '0', '1', ' ', '1', '1', '1', '0', '0', '1', '1', ' ', '1', '1', '1', '0', '0', '1', '1', ' ', '1', '1', '0', '0', '0', '0', '1', ' ', '1', '1', '0', '0', '1', '1', '1', ' ', '1', '1', '0', '0', '1', '0', '1', ' ', '1', '0', '0', '0', '0', '1']
  • 2
    Вы после: final = [format(ord(x), 'b') for x in str_msg] ? (вы также можете сделать этот 08b (или аналогичный), чтобы при необходимости форматирование 08b согласованным)
  • 0
    Для второго примера, пожалуйста, распечатайте вывод, который он дает, и желаемый вывод
Показать ещё 2 комментария
Теги:

4 ответа

3
Лучший ответ

Выражение:

' '.join(format(ord(x), 'b') for x in str_msg)

использует выражение генератора для str_msg каждого символа в строке: str_msg преобразуется в его значение ASCII, представленное в двоичном формате, которое затем передается в метод .join строки ' ' (пробел). В результате вы получаете строку двоичного представления этой строки.

Из звуков этого вам нужен list строк, содержащих двоичное представление каждого символа.

Это может быть достигнуто с помощью понимания списка, которое имеет тот же синтаксис, что и выражение генератора, но использует квадратные скобки:

[format(ord(x), 'b') for x in str_msg]
2

Как сказано выше:

str_msg = "This is a message!"
final = ' '.join(format(ord(x), 'b') for x in str_msg)
print(final.split())

выход:

['1010100', '1101000', '1101001', '1110011', '100000', '1101001', '1110011', '100000', '1100001', '100000', '1101101', '1100101', '1110011', '1110011', '1100001', '1100111', '1100101', '100001']

список

str_msg = [format(ord(ch),'b') for ch in "this is a message"]
print(str_msg)

выход

['1110100', '1101000', '1101001', '1110011', '100000', '1101001', '1110011', '100000', '1100001', '100000', '1101101', '1100101', '1110011', '1110011', '1100001', '1100111', '1100101']

карта

str_msg = list(map(lambda x: format(ord(x), 'b'), 'this is a message'))
print(str_msg)

выход

['1110100', '1101000', '1101001', '1110011', '100000', '1101001', '1110011', '100000', '1100001', '100000', '1101101', '1100101', '1110011', '1110011', '1100001', '1100111', '1100101']
1

Вы просто хотите разбить строку пробелами. По вашей конечной переменной,

'1010100 1101000 1101001 1110011 100000 1101001 1110011 100000 1100001 100000 1101101 1100101 1110011 1110011 1100001 1100111 1100101 100001'

do, final = final.split() и вы получите свой список

['1010100', '1101000', '1101001', '1110011', '100000', '1101001', '1110011', '100000', '1100001', '100000', '1101101', '1100101', '1110011', '1110011', '1100001', '1100111', '1100101', '100001']
0

Поэтому, хотя все ответы, которые я получил, являются vaild, я решил принять ответ @Joe Iddon, так как это ответ, который дает мне самый оптимальный код (т.е. самый короткий).

Спасибо всем, кто помог с вопросом!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню