如何将字符串添加到列表?

时间:2018-08-25 15:41:48

标签: python

因此,我尝试将二进制字符串添加到列表中,但是,我添加了每个单独的字符。我是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']

4 个答案:

答案 0 :(得分:3)

表达式:

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

使用生成器表达式生成字符串中的每个字符:str_msg转换为其ASCII值,以二进制表示,然后将其传递到字符串{{1}的.join方法中} (空间)。结果,您将获得该字符串的二进制表示形式的以空格分隔的字符串。

从声音上看,您需要一个' '的字符串,其中包含每个字符的二进制表示形式。

这可以通过具有与生成器表达式相同的语法的列表理解来实现,但是使用方括号:

list

答案 1 :(得分: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']

答案 2 :(得分:1)

您只想用空格分隔字符串。 在您的最终变量上,

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

做,final = final.split(),您会得到列表

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

答案 3 :(得分:0)

因此,虽然我得到的所有答案都无效,但我选择接受@Joe Iddon的答案,因为这是给我最佳代码(即最短代码)的答案。

感谢所有为这个问题提供帮助的人!