letterList = ["a", 0, "b", 0, "c", 0, "d", 0, "e", 0, "f", 0, "g", 0, "h", 0, "i", 0, "j", 0, "k", 0, "l", 0, "m", 0, "n", 0, "o", 0, "p", 0, "q", 0, "r", 0, "s", 0, "t", 0, "u", 0, "v", 0, "w", 0, "x", 0, "y", 0, "z", 0]
letterCount = 0
wordList = [None]
wordCount = 0
Count = 0
wordIndex = [0]
itext = cleaner(raw_input("enter itext please")).split()
print itext
for iword in itext:
if iword in wordList:
Count += 1
for word in wordList:
if iword == word:
wordList[wordList.index(word)+1][0] += 1
wordList[wordList.index(word)+1] += [wordCount]
else:
pass
elif iword not in wordList:
wordList += [iword]
wordList += [[1, itext.index(iword)]]
else:
pass
wordCount += 1
print wordList
The code looks and is messy, because I’m a rank beginner in python as well as in programming.
Can anyone help me to work the time-complexity of the code?
Apart from a difference in formatting, everything after
print itextcan be replaced by:This has complexity O(n).
Without Counter, you can better express your algorithm using a dict rather than a list to store the word counts:
A dict is perfect for storing the association between something (here a word) and something else (here a count). A list of alternating pairs of word and count has quite a few disadvantages over a dict, but the killer is that finding a word in the list is O(N) instead of O(1).