0

Write a program to replace each string with an integer value in a given list of strings. The replacement integer value should be a sum of Ascci values of each character of the corresponding string.

list_rivers  =["Ganges", "Godavari", "Brahmaputra", "Narmada","Yamuna", "Mahanadi", "Kaveri", "Tapti"]

I tried the following which is correct but I want to optimize the code.

list_rivers  =["Ganges", "Godavari", "Brahmaputra", "Narmada", "Yamuna", "Mahanadi", "Kaveri", "Tapti"]
river = [] // empty list
for i in list_rivers:
    num=0
    for j in i:
        num = num + ord(j)
    river.append(num) // [597, 813, 1143, 692, 619, 787, 610, 514]

Can anyone help how to optimize the above code?
Thanks in advance.

3 Answers 3

1

You can use list compréhension :

[sum([ord(i) for i in word]) for word in list_rivers]

it's equivalent to do

tmp_1 = []
for word in list_rivers:
    tmp_2 = []
    for i in word:
        tmp_2.append(ord(i))
    tmp_1.append(sum(tmp_2))
Sign up to request clarification or add additional context in comments.

Comments

0

As iElden mentions, you may use list comprehension here. Note that in this case, doing so does not necessarily optimize your code for efficiency.

Your method:

%%timeit
river = []
for i in list_rivers:
    num=0
    for j in i:
        num = num + ord(j)
    river.append(num)

 # 100000 loops, best of 3: 6.57 µs per loop

List comprehension:

%%timeit
result = [sum([ord(i) for i in word]) for word in list_rivers]

# 100000 loops, best of 3: 9.37 µs per loop

(Even slower) using map:

%%timeit
result = map(lambda x: sum([ord(letter) for letter in x]), list_rivers)

# 100000 loops, best of 3: 10.3 µs per loop

Comments

0

It says write a program to do it, so here's a program to do so. Example output: [597, 813, 1143, 692, 619, 787, 610, 514]

def string_to_int(string):
    retval = 0
    for c in string:
        retval += ord(c)
    return retval


def main(data):
    retval = []
    for item in data:
        retval.append(string_to_int(item))
    return retval


if __name__ == "__main__":
    list_rivers = ["Ganges", "Godavari", "Brahmaputra", "Narmada", "Yamuna", "Mahanadi", "Kaveri", "Tapti"]
    results = main(list_rivers)
    print results

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.