在循环中创建子列表

时间:2017-11-26 15:27:29

标签: python python-3.x list

我有这段代码:

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'。 如何才能做到这一点?理想情况下,子列表应该在循环中创建。

2 个答案:

答案 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