当我使用命令
时f.readline()[34:42].split()
我得到了列表['00', '36', '52']
。
我想:
首先将具有不同因子的单个元素相乘
然后将它们加在一起。
但是我需要做些什么才能添加它们并获得88?
当我尝试
时int(f.readline()[34:42].split()[0]) + int(f.readline()[34:42].split()[1]) + int(f.readline()[34:42].split()[2])
它转到文件的下一行,它不会添加同一行的3个数字,我想将它们加在一起。
答案 0 :(得分:4)
f.readline()
每次都不会读同一行。文件有一个阅读位置,每次你读取位置前进的东西。
首先将您阅读的行存储在变量中,然后对其进行操作。您也可以将拆分结果存储在变量中,这样您就不必继续拆分:
line = f.readline()
numbers = line[34:42].split()
result = int(numbers[0]) + int(numbers[1]) + int(numbers[2])
这里重要的部分是一次致电f.readline()
。您可以将上述内容合并到一行中完成所有工作的单行:
result = sum(int(number) for number in f.readline()[34:42].split())
如果您不熟悉该语言,可能会更难解析,但仍然只读取和拆分该行一次,然后在循环中处理分割后的结果元素,然后将它们全部与sum()
function
答案 1 :(得分:2)
您可以使用生成器表达式将所有值转换为int
,然后将sum
转换为结果。
>>> l = ['00', '36', '52']
>>> sum(int(i) for i in l)
88
如果您想将它们乘以一个因子,您可以在外部执行此操作
>>> factor = 3
>>> sum(int(i) for i in l) * factor
264
这是有效的,因为乘法是可交换的(和分配属性)。换句话说
n*a + n*b + n*c == n*(a + b + c)
答案 2 :(得分:2)
您正在使用readline()三次。做一次并将其存储在变量中。 像这样:
list1 = f.readline()[34:42].split()
print sum(map(int,list1))
无论何时使用fileobject.readline(),文件搜索位置都会在返回当前行后移动到下一行。
答案 3 :(得分:1)
您可以先将f.readline()[34:42].split()
中的输出存储在变量中,然后将map
存储起来并获取其总和
>>> l = f.readline()[34:42].split() # Stores ['00', '36', '52'] in l
>>> sum (map(int,l))
88
注意 - 下次使用readline
时,它会读取下一行
参考