我有这段代码:
binary = '011010'
binary = list(map(''.join, zip(*[iter(binary)]*3)))
b=[]
for h in range(len(binary)):
for i in range(len(binary[h])-1):
c = binary[h][i:i+2]
b.append(c)
我得到了结果:
binary = ['011', '010']
b = ['01', '11', '01', '10']
我希望得到一个效果:
b = [['01', '11'], ['01', '10']]
所以我想首先接受binary[0]
并制作一个循环然后接下来binary[1]
并将结果添加到列表' b',但是在单独的子列表中。在上面的代码中,它将结果一个一个地保存在列表中' b'。
如何才能做到这一点?理想情况下,子列表应该在循环中创建。
答案 0 :(得分:2)
这是一个简单的方法
b=[]
for h in range(len(binary)):
inner = []
for i in range(len(binary[h])-1):
c = binary[h][i:i+2]
inner.append(c)
b.append(inner)
或者你可以使用列表理解
b = [[binary[h][i:i+2] for i in range(len(binary[h])-1)] for h in range(len(binary)) ]
答案 1 :(得分:2)
您可以使用嵌套列表理解:
执行此操作b = [ [ binary[h][i:i+2] for i in range(len(binary[h])-1)]
for h in range(len(binary))]
因此,对于h
中的每个值range(len(binary))
,我们使用列表推导[ binary[h][i:i+2] for i in range(len(binary[h])-1)]
构建一个单独的列表。此列表理解将允许变量i
迭代range(len(binary[h])-1)
,并且对于每个元素,将binary[h][i:i+2]
添加到子列表。
话虽这么说,我们可以改进代码,并直接迭代二进制元素:
b = [ [ subbin[i:i+2] for i in range(len(subbin)-1)]
for subbin in binary]
因此,对于subbin
中的每个binary
列表,我们生成一个子列表(同样具有列表推导),这是[ subbin[i:i+2] for i in range(len(subbin)-1)]
的结果,因此我们生成{{1}的列表} {}为subbin[i:i+2]
中的每个i
。