用给定字符串列表中的整数值替换每个字符串的程序

2024-04-19 12:21:51 发布

您现在位置:Python中文网/ 问答频道 /正文

编写一个程序,用给定字符串列表中的整数值替换每个字符串。替换整数值应该是对应字符串的每个字符的Ascci值之和。你知道吗

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

我尝试了以下是正确的,但我想优化代码。你知道吗

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]

有人能帮助优化上面的代码吗?
提前谢谢。你知道吗


Tags: 字符串代码整数numlistriverriversmahanadi
3条回答

它说写一个程序来做,所以这里有一个程序来做。输出示例:[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

您可以使用列表压缩:

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

这相当于

tmp_1 = []
for word in list_rivers:
    tmp_2 = []
    for i in word:
        tmp_2.append(ord(i))
    tmp_1.append(sum(tmp_2))

正如艾尔登提到的,你可以在这里使用列表理解。请注意,在这种情况下,这样做并不一定会优化代码以提高效率。你知道吗

您的方法:

%%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

列表理解:

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

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

(更慢)使用地图:

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

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

相关问题 更多 >