Coś dziwnego dzieje się w tym kodzie:Dlaczego "the" przetrwać po .remove?
fh = open('romeo.txt', 'r')
lst = list()
for line in fh:
line = line.split()
for word in line:
lst.append(word)
for word in lst:
numberofwords = lst.count(word)
if numberofwords > 1:
lst.remove(word)
lst.sort()
print len(lst)
print lst
romeo.txt pochodzi z http://www.pythonlearn.com/code/romeo.txt
Wynik:
27
['Arise', 'But', 'It', 'Juliet', 'Who', 'already', 'and', 'breaks', 'east', 'envious', 'fair', 'grief', 'is', 'kill', 'light', 'moon', 'pale', 'sick', 'soft', 'sun', 'the', 'the', 'through', 'what', 'window', 'with', 'yonder']
Jak widać, istnieją dwa zwanej dalej ". Dlaczego? mogę uruchomić tę część kodu ponownie:
for word in lst:
numberofwords = lst.count(word)
if numberofwords > 1:
lst.remove(word)
Po uruchomieniu tego kodu po raz drugi usuwa pozostałe zwanej dalej ", ale dlaczego nie działać po raz pierwszy?
poprawny wynik:
26
['Arise', 'But', 'It', 'Juliet', 'Who', 'already', 'and', 'breaks', 'east', 'envious', 'fair', 'grief', 'is', 'kill', 'light', 'moon', 'pale', 'sick', 'soft', 'sun', 'the', 'through', 'what', 'window', 'with', 'yonder']
dunnno dlaczego został edytowany trzeba przewinąć teraz zobaczyć result – Gunnm
Domyślam się, że po '.remove()' pętla 'for' nie zapętla się poprawnie (ponieważ prawdopodobnie nie może poprawnie indeksować elementów). –
Modyfikowanie listy podczas iteracji może prowadzić do niezdefiniowanego zachowania. –