代码输出正确的信息,但格式不正确,如何分割字符串?

时间:2018-03-30 23:23:16

标签: python python-3.x

这是我的代码:

def string2bin(s):
y = []
for x in s:
    q = []
    q.append(str(bin(ord(x))[2:].zfill(8)))
    y.append(q)
return y

应该输出:

string2bin('abc')
[[0, 1, 1, 0, 0, 0, 0, 1], [0, 1, 1, 0, 0, 0, 1, 0],
 [0, 1, 1, 0, 0, 0, 1, 1]]

但输出:

string2bin('abc')
[['01100001'], ['01100010'], ['01100011']]

另外,你如何分割字符串? 谢谢你的帮助!

4 个答案:

答案 0 :(得分:0)

试试这个:

def string2bin(s):
  return [list(map(int, str(bin(ord(x)))[2:].zfill(8))) for x in s]

print(string2bin('abc'))

它产生(直到缩进):

[[0, 1, 1, 0, 0, 0, 0, 1], 
 [0, 1, 1, 0, 0, 0, 1, 0], 
 [0, 1, 1, 0, 0, 0, 1, 1]]

您错过了map(int, ...)list(...)部分。

答案 1 :(得分:0)

对代码进行最简单的编辑可能就是简单地将附加内容从字符串更改为列表。当您将其作为字符串添加到列表中时,因为ord的工作方式只是将字符串作为一个整体添加,而不是作为单个值添加。

def string2bin(s):
     y = []
     for x in s:
         q = []
         q.append(list(bin(ord(x))[2:].zfill(8)))
         y.append(q)
     return y

答案 2 :(得分:0)

将字符串转换为数字列表。

def string2bin(s):
    y = []
    for x in s:
        q = [int(c) for c in (str(bin(ord(x))[2:].fill(8)))]
        y.append(q)
    return y

答案 3 :(得分:0)

因此,您一次从字符串中取出1个字符,然后将其转换为bin,删除0b,然后用0填充其余部分以保持长度为8。

问题是这反过来会给你一个要追加的字符串,而不是一个数组。

这是我的解决方案,不是最恐怖的,但它很容易理解:

def string2bin(s):
    y = []
    for x in s:
        q = []
        adjusted = list(str(bin(ord(x)))[2:].zfill(8))
        for num in adjusted:
            q.append(int(num))
        y.append(q)
    return y

print(string2bin('abc'))

这完全符合您的要求:

[[0, 1, 1, 0, 0, 0, 0, 1], [0, 1, 1, 0, 0, 0, 1, 0], [0, 1, 1, 0, 0, 0, 1, 1]]