2015-10-22 2 views
0

Я написал следующий код для достижения ожидаемых результатов. Он работает нормально до 200 ввода. Я думаю, что оптимизация этого кода решит мою проблему. Кто-нибудь может помочь мне оптимизировать следующий код.Может ли кто-нибудь помочь мне оптимизировать мой код?

from collections import defaultdict 
number=input() 
list_mine=[] 
for i in range(1,number+1): 
    list_mine.append(raw_input("")) 
    #print list_mine 
#understanding the number of unique occurence 

unique=list(set(list_mine)) 

number_of_unique_occurence=len(unique) 

d=defaultdict(int) 
count=0 
for i in unique: 
    for j in list_mine: 
     #print "i is "+str(i) 
     if i==j: 
      count = count+1 
      d[i]=count 

    count=0 

print str(number_of_unique_occurence) 
check = 0 
counts =0 
list_for=[] 
for hel in list_mine: 
    #print "current element " + str(hel) 
    #print "index of that element is "+str(list_mine.index(hel)) 
    check = check+1 

    if list_mine.index(hel) > 0: 
     #print "check = " +str(check) 
     for jj in range(0,list_mine.index(hel)): 
      #print jj 
      if hel == list_mine[jj]: 
       #print "elemnt are there" 
       break 
      else: 
       if counts == list_mine.index(hel)-1: 
        #print "greater then zero   "+ str(hel) +" "+str(d[hel]) 
        list_for.append(d[hel]) 
        continue 
      counts=counts+1 

    else: 
     if check <= 1: 
      #print "at zero    "+ str(d[hel]) 
      list_for.append(d[hel]) 


print '%s' %' '.join(map(str, list_for)) 

входная выборка

4 
bcdef 
abcdefg 
bcde 
bcdef 

Пример вывода

3 
2 1 1 

"BCDEF" дважды появляется на входе т.е. в первом и последнем положении, остальные слова появляются один раз. Порядок первых появлений - «bcdef», «abcdefg» и «bcde», следовательно, выход.

+0

Я почти боюсь спросить, что происходит на входе 200. – TigerhawkT3

+0

фактически время выполнения получение увеличивается .. замечание много .. я никогда не оптимизирую свой код раньше. я думаю, что какой-нибудь дом решит проблему? –

+0

Был ли в моем коде заблокирован элемент, который увеличивает время выполнения? –

ответ

1

Если у меня отсутствует какая-то деталь здесь, вы ищете тип OrderedDict, который позволяет вам считывать записи словаря в том порядке, в котором вы их вставляли, например.

from collections import OrderedDict 
number=input() 

occurrences = OrderedDict() 
for i in range(1,number+1): 
    s = raw_input("") 
    occurrences[s] = occurrences.get(s, 0) + 1 
number_of_unique_occurence=len(occurrences) 
print number_of_unique_occurence 
print '%s' %' '.join(map(str, occurrences.values())) 
Смежные вопросы