2015-03-31 3 views
0

Вот фрагмент кода и внизу, в разделе '' '' commented '' 'кода, есть строка, которая удивительна для меня. Пожалуйста, обратите внимание:Вложенные для циклов, итерация, подсчет нескольких вхождений элемента

#!/path/to/python 
#-*- coding: utf-8 -*- 
def frequencer(sliced):  
    podium = [] 
    for item in sliced: 
     scat = len(sliced) 
     print ("le the first scat for the word ' {0} ' is '{1} '.".format(item, scat)) 
     for indice in range (len(sliced)): 
      print("indice = ", indice) 
      print("sliced[indice]",sliced[indice]) 
      if sliced[indice] == item: 
       print ("sliced[indice] is equal to ' {0} ', identical to ' {1} ' item.".format(sliced[indice], item)) 
       scat -= 1 
       print("scat is equal to ' {0} '.".format(scat)) 
     print("scat exdented: ", scat) 
     frequence = len(sliced) - scat 
     print("frequence: ", frequence) 
     podium += [frequence] 
     print("podium: ", podium) 
    print("podium: ", podium) 
    return(max(podium)) 
print(frequencer(['Here', 'is', 'a', 'line', 'like', 'sparkling', 'wine', 'Line', 'up', 'now', 'behind', 'the', 'cow'])) 

''' 
le the first scat for the word ' line ' is '13 '. 
indice = 0 
sliced[indice] Here 
indice = 1 
sliced[indice] is 
indice = 2 
sliced[indice] a 
indice = 3 
sliced[indice] line 
sliced[indice] is equal to ' line ', identical to ' line ' item. 
scat is equal to ' 12 '. 
indice = 4 
sliced[indice] like 
indice = 5 
sliced[indice] sparkling 
indice = 6 
sliced[indice] wine 
indice = 7 
sliced[indice] Line <-- *WHY IS THIS NOT CONSIDERED EQUAL TO "line"?* 
indice = 8 
sliced[indice] up 
indice = 9 
sliced[indice] now 
indice = 10 
sliced[indice] behind 
indice = 11 
sliced[indice] the 
indice = 12 
sliced[indice] cow 
scat exdented: 12 
frequence: 1 
podium: [1, 1, 1, 1] 
''' 

И вот мой вопрос:

Элемент «line» представлен 2 раза в списке, и я был уверен, что scat=11 и frequence = 2.

Я пробовал много разных углублений, но основной интерес в том, что у меня есть недостаток в возможности следить за ходом операций, которые программа выполняет для машины.

Чтобы проиллюстрировать это, я попытался напечатать много шагов, но я мог бы действительно использовать некоторые дополнительные разъяснения. Пожалуйста помоги.

+0

@logic. Большое спасибо за стилистическую модификацию. Как вы догадались, чтение английского языка для меня непросто, но мне это нравится. – kouty

ответ

0

Сравнение строк на Python чувствительно к регистру. поэтому 'A' == 'a' - False. Если вы хотите сделать сравнение без учета регистра, вы должны использовать методы lower или upper, чтобы сделать строки ниже или в верхнем регистре. Таким образом, 'A'.lower() == 'a' является True.

В вашем случае, поскольку они являются многосимвольными строками, вы хотели бы использовать нижний для обоих, например sliced[indice].lower() == item.lower(). Вы также можете конвертировать весь список в нижнем регистре, прежде чем начать, избегая проблему полностью, например, так:

slicedlow = [item.lower() for item in sliced] 

Однако, вы можете конвертировать весь алгоритм пару строк с использованием collections.Counter объекта:

from collections import Counter 
slicedlow = [item.lower() for item in sliced] 
counts = Counter(slicedlow) 
maxcount = max(counts.values()) 

Или даже один вкладыш:

from collections import Counter 
maxcount = max(Counter(item.lower() for item in sliced).values()) 
+0

Да! Я невнимателен и непреднамерен. Сколько раз для этого ... @ TheBlackCat: Thank's – kouty

+0

Если это правильный ответ, отметьте его как таковой, чтобы другие могли его найти. – TheBlackCat

Смежные вопросы