0

我有一个名字列表:

names = ['ALICE', 'BOB', 'ME']

'A''B'1、2、3 'C'... 'ALICE' 的总和可以通过以下方式计算:

sum([ord(i) - ord('A') + 1 for i in 'ALICE'])  // ALICE: 30, BOB: 19, ME: 18

现在,我想计算名称中的所有总和乘以 中的索引names,例如 30 * 1 + 19 * 2 + 18 * 3 = 122。

这样做很容易:

s = 0
for i in range(len(names)):
    s += sum(([ord(j) - ord('A') + 1) * (i + 1) for j in names[i]])
print s

但是我想学习以列表生成器样式(也许在一行中)来做到这一点。这个怎么做?

4

1 回答 1

3

使用enumerate

>>> names = ['ALICE', 'BOB', 'ME']
>>> sum(i * sum(ord(ch) - ord('A') + 1 for ch in name) for i, name in enumerate(names, 1))
122

sum接受任何可迭代的,因此您可以传递生成器表达式而不是列表推导。


>>> enumerate('ALICE')
<enumerate object at 0x7f8f7b8c42d0>
>>> list(enumerate('ALICE'))
[(0, 'A'), (1, 'L'), (2, 'I'), (3, 'C'), (4, 'E')]
>>> list(enumerate('ALICE', 1))
[(1, 'A'), (2, 'L'), (3, 'I'), (4, 'C'), (5, 'E')]
于 2013-10-29T08:31:57.140 回答