为什么列表与其他列表进行比较或打印时会发生变化?

时间:2019-02-18 04:44:33

标签: python-3.3

我正在编写一个程序,将元素添加到子结构上,以在一组测试化合物中创建更大的子结构。我觉得我的程序应该可以工作,但是,我正在使用的列表之一(fmlist)与另一个列表(filter(mlist))进行了比较。当我自己打印fmlist时,它是正确的。但是,当我使用filter(mlist)打印它时,添加了4个元素。我的功能(例如filter)应该是正确的,所以我真的不确定为什么fmlist会不断变化。如果有人可以帮助,那就太好了!

我尝试调整语句的位置并查看了我的所有函数,但它们似乎不是问题。所有列表均已定义,因此也不是问题。

number=1
while True:
    mlist=[]
    print(fmlist)
    for item in fmlist:
        for i in range(len(item)+1):
            for elmt in elements:
                newitem=item[:i]+elmt+item[i:]#adding the elements on in different positions
                newitemp=item[:i] + '(' + elmt + ')' +item[i:]
                mlist.append(newitem)
                mlist.append(newitemp)
    print(mlist) #me testing it
    print(fmlist)
    print(len(fmlist))
    print(filter(mlist),len(fmlist))
    print(fmlist)
    if set(filter(mlist))==set(fmlist):#stop condition
        print('run' + str(number))#more testing
        break
    for item in filter(mlist):#avoid repeats
        if item not in fmlist:
            fmlist.append(item)
    number+=1

我希望列表保持不变,并使程序继续运行,但是列表更改并且程序停止。我可能只是错过了一些东西,但是如果有人可以帮忙,那将是非常不错的。 测试打印的输出(由于mlist太大,因此除外):

['Oc1c(O)cccc1']
1
['Oc1c(O)cccc1', 'COc1c(O)cccc1', 'O(C)c1c(O)cccc1', 'Oc1c(OC)cccc1', 'Oc1c(O(C))cccc1'] 5
['Oc1c(O)cccc1', 'COc1c(O)cccc1', 'O(C)c1c(O)cccc1', 'Oc1c(OC)cccc1', 'Oc1c(O(C))cccc1']
run1

0 个答案:

没有答案