Python for循环有两个相关变量

时间:2013-10-29 08:30:01

标签: python list

我有一个名单:

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

'A'设为1,'B'设为2,将'C'设为3 ...“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

但我想学习列表生成器样式(也许在一行中)。怎么做?

1 个答案:

答案 0 :(得分: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')]