首先,假设您有一个名为 sample.txt 的文件,其中包含以下内容:
CDEF
ABC
FIJK
脚本
这是完成(我认为)你所追求的脚本:
with open('so.txt', 'r') as file:
lines = [x.replace('\n', '') for x in file.readlines()]
print "lines: ", lines
lines.sort()
print "lines sorted: ", lines
sums = [sum([ord(letter.lower()) - 96 for letter in line]) for line in lines]
print "sums: ", sums
products = [x * (sums.index(x) + 1) for x in sums]
print "products: ", products
total = sum(products)
print "total: ", total
输出
以上代码的输出:
lines: ['CDEF', 'ABC', 'FIJK']
lines sorted: ['ABC', 'CDEF', 'FIJK']
sums: [6, 18, 36]
products: [6, 36, 108]
total: 150
解释
(1) 以只读文件打开so.txt,并将其存储为变量:file。
with open('so.txt', 'r') as file:
(2) 取出@987654330@ 中的每一行并删除所有换行符并将其变成一个列表。
lines = [x.replace('\n', '') for x in file.readlines()]
(3) 对列表进行排序。
lines.sort()
(4) 这个有点棘手,因为它正在做一些事情。
sums = [sum([ord(letter.lower()) - 96 for letter in line]) for line in lines]
所以,让我们把它分成两个部分:
sums = [<do_something_here with line> for line in lines]
该代码称为list comprehension。它正在使用lines 列表的每个元素创建一个新列表,并做一些事情。大致相当于:
sums = []
for line in lines:
sums.append(<do_something_here with line>)
因此,有了line 变量(这将是一个字符串),我们也可以将其视为一个列表并在另一个列表理解中对其进行迭代:
[ord(letter.lower()) - 96 for letter in line]
对于line 字符串中的每个letter,它将其转换为小写,使其成为ASCII 序数,并减去96 使其以a == 1 开头。可以看到all ASCII numbers here的列表。
最后,有了一个现在将字符串转换为数字的列表,我们将sum() 应用于该列表。
我们现在有:
[6, 18, 36]
(5) 我们采用sums 的列表并提供另一个 列表理解。这一次,目标是获取每个数字,并将其乘以它的index。您可以通过调用list.index(element) 来获取元素的索引。如下:
products = [x * (sums.index(x) + 1) for x in sums]
(6) 最后,我们要做的就是再次将我们使用sum() 方法创建的最后一个列表相加。
total = sum(products)
我希望我回答了你想要的问题。