Я делаю программу для добавления элементов в подструктуры для создания более крупных подструктур в наборе тестовых соединений.Я чувствую, что моя программа должна работать, однако один из списков, которые я использую (fmlist), изменяется при сравнении с другим (filter (mlist)).Когда я печатаю fmlist самостоятельно, это правильно.Однако, когда я печатаю его с фильтром (mlist), добавляются 4 элемента.Мои функции, такие как фильтр, должны быть правильными, поэтому я действительно не уверен, почему 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