为了更好地理解,我简化了清单。 我有一个动态变化的列表(比如说):
recPkt = [10, 1, 38, 64]
并希望检查列表是否与列表中的某个列表匹配(如下面的一个)。此列表列表是从txt文件读取的。你知道吗
mDdata = [[10, 1, 37, 6], '|', [10, 1, 37, 64], '|', [10, 1, 37, 45], '|', [10, 1, 37, 51]]
如果列表不在里面,我想把它附加到列表列表(mDdata)中。你知道吗
我的问题是,当我附加。更新的列表未正确保存。如果列表中的所有列表都相同,只有最后一个列表不同,或者空列表被追加(取决于我把pcktLst [:] = []
放在哪里)
if isDev == 1: #device is on list
devdata = []
devdata [:] = []
pcktLst = []
pcktLst [:] = []
ind = myReadList.index(devAddr+"-END"+"--------------------------------------------")
devdata = myReadList [iJ + 10: ind]
devdata = str(devdata)
x = devdata.find("(")
y = devdata.find(")")
devdata = devdata[(x+1):(y)]
devdata = devdata.split('|')
mDdata = []
mDdata [:] = []
s = 0
devLst = []
devLst [:] = []
dd = readDtoL(devdata) #returns list of list of existing data in txt file
count = 0
for eaItm in dd:
eaItm = eaItm.replace("[","")
eaItm = eaItm.replace("]","")
eaItm = eaItm.split(", ")
pcktLst [:] = []
print eaItm
print dd
for eaNumb in eaItm:
print eaNumb
eaNumb = int(eaNumb)
pcktLst.append(eaNumb)
devLst = pcktLst
if count == 0 :
mDdata.append(devLst)
print mDdata
elif count > 0:
mDdata.append("|")
mDdata.append(devLst)
print "Count"
print mDdata
count+=1
pcktLst [:] = []
bla = []
bla [:] = []
for eNumb in recPkt:
#print eNumb
eNumb = int(eNumb)
bla.append(eNumb)
print bla
#print mDdata
if (bla in mDdata) == False:
mDdata.append("|")
mDdata.append(bla)
print "TOLE JE PO APPEND"
print mDdata
我最好的猜测是我应该有一些临时工。变量或将列表更改为元组。你知道吗
我相信引起你问题的部分是-
当你这样做的时候-
您只是将
pcktLst
的引用分配给devLst
,它们都引用相同的列表。当你这样做的时候-mDdata.append(devLst)
-你就是在列表中附加列表引用。你知道吗当你这么做的时候-
这个inplace清除
pcktLst
引用的列表,它也是列表devLst
,以及您刚刚附加到mDdata
的lsit。你不应该那样做。一个非常简短的例子来说明这种行为-我猜您对
[:]
有某种错误的理解,当在赋值运算符的左侧使用切片时,您要求python对列表进行原地变异,这将反映在所有引用列表的名称中。你应该用这个,除非你真的需要在原地变异,我不认为有任何必要。你可以做-这将导致
pcktList
指向一个新列表,而不会对它以前指向的列表造成任何问题。你应该像这样到处用。你知道吗而且,当你这样做的时候-
这没有任何好处,你可以写-
您可以使用^{} 函数和^{} 方法来检查您的列表是否包含与
mDdata
中的任何子列表完全相同的元素。你知道吗相关问题 更多 >
编程相关推荐