Witam! Piszę program, rozwiązujący proste szyfry podstawieniowe. W poniższym przykładzie znajduje się przykładowe słowo z kryptogramu ('ajahzlvwrf') oraz fragment programu, który oczyszcza uzyskaną wcześniej listę słów (skopiowaną do poniższego kodu) z tych słów, które zawierają co najmniej jedną literę z kryptogramu 'ajahzlvwrf' w dokładnie tym samym miejscu co w kryptogramie. Słowo 'acarpelous' na przykład posiada pierwszą literę 'a', tak samo jak kryptogram 'ajahzlvwrf', więc to słowo zostaje usunięte z listy słów (lista_list). Ale słowo 'adactylous' też posiada 1-szą literę 'a', ale ono (i kilka innych) już nie zostaje usunięte. Wiem o referencjach współdzielonych, dlatego w swoim kodzie nie usówałem słów z oryginalnej listy słów (lista_list), ale z jej kopii (tu: kopia_listy_list = lista_list[:]
, ale zrobiłem też wcześniej kopia_listy_list = lista_list.copy()
). W innych programach tak właśnie się (z pełnym sukcesem) z tym problemem rozprawiałem. Tutaj to nie działa, bo kiedy printuję listę_list, okazuje się, że z niej też usówane są słowa, które mają być usówane jedynie z jej kopii, a w związku z tym program, iterując przez oryginalną listę_list, z której co chwilę wypada jakieś słowo, będzie niektóre słowa pomijał w analizie... W czym tkwi błąd? lista_list jest (i musi być) listą dwuwymiarową (jak sama nazwa wskazuje). Może to właśnie w tym tkwi problem. Jeśli ktoś wie, w czym tkwi problem, bardzo proszę o pomoc i z góry dziękuję.
lista_slow = ['ajahzlvwrf']
lista_list = [['acarpelous', 'adactylous', 'adaptively', 'amateurish','anabolites', 'anaglyphic', 'anaglyptic',
'analogised', 'analogized', 'analogizes', 'anamorphic', 'anarchised', 'anarchized', 'anarchizes',
'anastrophe', 'anatomised', 'anatomized', 'anatomizes', 'babylonish', 'cacomistle', 'cochineals',
'cockatiels', 'cockfights', 'cocklairds', 'cockneyish', 'cockneyism', 'cocktailed', 'cuckolding',
'cyclograph', 'cyclopedia', 'dedicators', 'dedicatory', 'deductions', 'didelphous', 'didynamous',
'elevations', 'emendators', 'emendatory', 'everything', 'execrating', 'execration', 'executions',
'exemptions', 'eyebrights', 'idiographs', 'iridaceous', 'iridectomy', 'irishwoman', 'irishwomen',
'membranous', 'mimeograph', 'mimography', 'nonpareils', 'odontalgic', 'paperbound', 'popularise',
'popularity', 'popularize', 'populating', 'suspecting', 'tetraploid', 'tetrapodic', 'tetrapolis',
'totalizers', 'tutworkman', 'tutworkmen', 'usucapient', 'usucapting', 'usucaption', 'usurpation',
'usurpative', 'usurpingly']]
kopia_listy_list = lista_list[:]
for indexik, podlista in enumerate(lista_list):
for slowo in podlista:
for nr_litery,litera in enumerate(slowo):
if litera == lista_slow[indexik][nr_litery]:
print('slowo: ',slowo)
kopia_listy_list[indexik].remove(slowo)
print(lista_list)
break