我正在编写一个程序,将元素添加到子结构上,以在一组测试化合物中创建更大的子结构。我觉得我的程序应该可以工作,但是,我正在使用的列表之一(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