A value in a list, python

python, python-3.x

Solution

letterGoodness is better as a dictionary, then you can just do:

sum(letterGoodness.get(c,0) for c in yourstring.upper())
#                                             #^.upper for defensive programming

To convert `letterGoodness` from your list to a dictonary, you can do:

import string
letterGoodness = dict(zip(string.ascii_uppercase,letterGoodness))

If you're guaranteed to only have uppercase letters and spaces, you can do:

letterGoodness = dict(zip(string.ascii_uppercase,letterGoodness))
letterGoodness[' '] = 0
sum(letterGoodness[c] for c in yourstring)

but the performance gains here are probably pretty minimal so I would favor the more robust version above.

If you insist on keeping `letterGoodness` as a list (and I don't advise that), you can use the builtin `ord` to get the index (pointed out by cwallenpoole):

 ordA = ord('A')
 sum(letterGoodness[ord(c)-ordA] for c in yourstring if c in string.ascii_uppercase)

I'm too lazy to `timeit` right now, but you may want to also define a temporary set to hold `string.ascii_uppercase` -- It might make your function run a little faster (depending on how optimized `str.__contains__` is compared to `set.__contains__`):

 ordA = ord('A')
 big_letters = set(string.ascii_uppercase)
 sum(letterGoodness[ord(c)-ordA] for c in yourstring.upper() if c in big_letters)

Problem

Every character in the English language has a percentage of occurrence, these are the percentages: ``` A B C D E F G H I .0817 .0149 .0278 .0425 .1270 .0223 .0202 .0609 .0697 J K L M N O P Q R .0015 .0077 .0402 .0241 .0675 .0751 .0193 .0009 .0599 S T U V W X Y Z .0633 .0906 .0276 .0098 .0236 .0015 .0197 .0007 ``` A list called `letterGoodness` is predefined as: ``` letterGoodness = [.0817,.0149,.0278,.0425,.1270,.0223,.0202,... ``` I need to find the "goodness" of a string. For example the goodness of 'I EAT' is: .0697 + .1270 + .0817 + .0906 =.369. This is part of a bigger problem, but I need to solve this to solve the big problem. I started like this: ``` def goodness(message): for i in L: for j in i: ``` So it will be enough to find out how to get the occurrence percentage of any character. Can you help me? The string contains only uppercase letters and spaces.

Original source