将列表B附加到列表A并删除新元素python的列表B元素

时间:2016-07-18 05:54:33

标签: list python-2.7

我试图将列表B中的数据附加到列表A以在列表中创建列表,使用listA.append(listB)不起作用,我是python的新手还有什么需要添加的吗?

这是示例代码

`from random import randint
 def call():
     c=0
     a=[]
     b=[]
     while (c != 10):
        b.append(randint(0,9))
        print b
        a.append(b)
        print a
        del b[:]
        c=c+1

 for i in range(2):
    call()`

这是输出

`[7]
 [[7]]
 [3]
 [[3], [3]]
 [3]
 [[3], [3], [3]]
 [8]
 [[8], [8], [8], [8]]
 [0]
 [[0], [0], [0], [0], [0]]
 [7]
 [[7], [7], [7], [7], [7], [7]]
 [3]
 [[3], [3], [3], [3], [3], [3], [3]]
 [9]
 [[9], [9], [9], [9], [9], [9], [9], [9]]
 [2]
 [[2], [2], [2], [2], [2], [2], [2], [2], [2]]
 [1]
 [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
 [8]
 [[8]]
 [0]
 [[0], [0]]
 [0]
 [[0], [0], [0]]
 [6]
 [[6], [6], [6], [6]]
 [2]
 [[2], [2], [2], [2], [2]]
 [7]
 [[7], [7], [7], [7], [7], [7]]
 [9]
 [[9], [9], [9], [9], [9], [9], [9]]
 [7]
 [[7], [7], [7], [7], [7], [7], [7], [7]]
 [6]
 [[6], [6], [6], [6], [6], [6], [6], [6], [6]]
 [1]
 [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]`

我不明白为什么会这样?

2 个答案:

答案 0 :(得分:1)

您没有追加b内容,而是追加b本身。您需要在循环中重新绑定b,而不是仅清空之前的内容。

 ...
print a
b = []
c=c+1

答案 1 :(得分:1)

您始终将相同的列表对象b附加到列表中。这意味着,您的列表a将包含相同列表对象b的10倍。

更改为b的内容现已反映到a中的所有项目,这就是您想知道的内容。

以下代码执行您要执行的操作。

from random import randint

def call():
    c=0
    a=[]
    while (c != 10):
        b = [] # a new list for each iteration!
        b.append(randint(0,9))
        print b
        a.append(b)
        print a
        c=c+1

for i in range(2):
    call()`