Почему список меняется при сравнении или печати с другим? - PullRequest
0 голосов
/ 18 февраля 2019

Я делаю программу для добавления элементов в подструктуры для создания более крупных подструктур в наборе тестовых соединений.Я чувствую, что моя программа должна работать, однако один из списков, которые я использую (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...