python 3使用for循环来复制列表

时间:2017-11-26 20:41:45

标签: python list for-loop

我正在进行串行通信。我有两个列表,第一个是单维列表' dataList'另一个是2D列表' multiList'。通过串行通信,我发送的是' 101' 102',' 103' ....' 109'。发送的数据存储在dataList中,并且该dataList与第一个dataList一样逐行存储在multiList中  应该存储在multiList的第一行,第二个dataList应该存储在multiList的第二行以及更多。目前multiList输出如下:

[[' 1',' 108',' 109',' 100',' 101'] ,[],[],[],[]]

[[' 102',' 103',' 104',' 105',' 106'] ,[' 102',' 103',' 104',' 105',' 106'],[] ,[],[]]

[[' 107',' 108',' 109',' 100',' 101'] ,[' 107',' 108',' 109',' 100',' 101'],[& #39; 107',' 108',' 109',' 100',' 101'],[],[] ]

但我希望我的输出如下:

[[' 101',' 102',' 103',' 104',' 105'] ,[],[],[],[]]

[[' 101',' 102',' 103',' 104',' 105'] ,[' 106',' 107',' 108',' 109',' 101'],[] ,[],[]]

[[' 101',' 102',' 103',' 104',' 105'] ,[' 106',' 107',' 108',' 109',' 101'],[& #39; 102',' 103',' 104',' 105',' 106'],[],[] ]

import serial

row=5
col=3
multiList = ([[], [], [], [], []])

ser = serial.Serial(COM4, baudrate=115200, timeout=1)
numPoints = 5
dataList = [0] * numPoints

def getValues():
    ser.write(b'g')
    fpgadata = ser.readline().decode('ascii').split('\n')
    return fpgadata[0]

def update():
    for j in range(3):
        for i in range(0, numPoints):
            dataList[i] = getValues()
    #print(dataList)
        multiList[j] = dataList
        print(multiList)

update()

1 个答案:

答案 0 :(得分:1)

问题是,在multiList[j] = dataList步骤中,您不会复制元素,只会复制dataList副本。所以实际上multiList包含对同一列表的多个引用。要将元素复制到新列表中,请编写multiList[j] = dataList[:],如下所示:

def update():
    for j in range(3):
        for i in range(0, numPoints):
            dataList[i] = getValues()
        multiList[j] = dataList[:]
        print(multiList)

这将为multiList[j]新列表分配所需的效果, 已复制dataList元素。