【问题标题】:python3 sum in stings each letter valuepython3总和每个字母值
【发布时间】:2015-11-30 10:30:17
【问题描述】:

我需要字符串字母值 ex 的总和。 a = 1 b = 2 c = 3 d = 4

alphabet = 'abcdefghijklmnopqrstuvwxyz'

v1

string = "abcd"

# #result = sum(string) so 
if string[0] and string[1] and string[2] and string[3] in alphabet:
   if string[0] is alphabet[0] and string[1] is alphabet[1] and string[2] is alphabet[2] and string[3] is alphabet[3]:
      print(a+b+c+d)

v2

string = ("ab","aa","dc",)

if string[0][0] and string[0][1] and string[1][0] and string[1][1] and string[2][0] and string[2][1] in alphabet:
   if string[0] is alphabet[0] and string[1] is alphabet[1] and string[2] is alphabet[2] and string[3] is alphabet[3]:
      print(a+b+c+d)   

解决办法是什么?你能帮帮我吗

【问题讨论】:

标签: string algorithm sorting python-3.x


【解决方案1】:

使用sum() functiongenerator expression;从string.ascii_lowercase 构建的字典可以用作获取每个字母的整数值的方法:

from string import ascii_lowercase

letter_value = {c: i for i, c in enumerate(ascii_lowercase, 1)}
wordsum = sum(letter_value.get(c, 0) for c in word if c)

enumerate(ascii_lowercase, 1) 在迭代时产生 (index, letter) 对,从 1 开始。这给了你 (1, 'a')(2, 'b') 等。可以在字典中转换为 c: i 字母对,将字母映射到整数。

接下来,使用dict.get() method 可以让您选择一个默认值;对于输入字符串中的任何字符,您可以查找数值并将其映射为整数,但如果该字符不是小写字母,则返回 0。带有循环的sum(...) 部分然后简单地将这些值相加。

如果您需要支持带单词的序列,只需再次使用sum()。将上述sum() 调用放入一个函数中,并将该函数应用于序列中的每个单词:

from string import ascii_lowercase

letter_value = {c: i for i, c in enumerate(ascii_lowercase, 1)}

def sum_word(word):
    return sum(letter_value.get(c, 0) for c in word if c)

def sum_words(words):
    return sum(sum_word(word) for word in words)

【讨论】:

  • 我会使用 {chr(i+96):i for i in range(1, 27)} 而不是导入 ascii_lowercase
  • @StevenSummers:这是一个品味问题;我认为这是自我记录的方式。
  • @MartijnPieters 你是我的英雄
  • @MartijnPieters 我怎样才能对字符串组合产品进行求和,我尝试了 sum(letter_value.get(c,0) * letter_value.values() for c in zip(m) if c) 但我得到了* 错误不支持的操作数类型:'int' 和 'dict_values'
  • @PyDroid:使用import operator,然后使用reduce(operator.mul, (letter_value.get(c, 0) for c in word if c), 1) 生成一个词积。
【解决方案2】:

老派的做法是利用小写字母是连续的,这样ord(b) - ord(a) == 1:

data = "abcd"
print("Sum:", sum(ord(c)-ord("a")+1 for c in data))

当然,您可以“优化”它以减少计算次数,尽管在这种情况下看起来很愚蠢:

ord_a = ord("a")
print("Sum:", sum(ord(c)-ord_a for c in data)+len(data))

【讨论】:

  • 谢谢alex,你能帮我吗,如何获得生产字符串?前任。如果我有 sum a+b+c+d 比我需要比较 sum 和 product if a+b+c+d != a * b * c * d
  • 我用谷歌搜索了“python 产品”和boom!。谷歌结果中的第二次点击向您展示了如何做到这一点。 (如图所示定义它,然后使用prod() 而不是sum()。)
猜你喜欢
  • 2022-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 2015-06-21
相关资源
最近更新 更多