一起添加列表的元素

时间:2015-02-23 15:18:59

标签: python string list python-2.7

当我使用命令

f.readline()[34:42].split()

我得到了列表['00', '36', '52']

我想:

  1. 首先将具有不同因子的单个元素相乘

  2. 然后将它们加在一起。

  3. 但是我需要做些什么才能添加它们并获得88?

    当我尝试

    int(f.readline()[34:42].split()[0]) + int(f.readline()[34:42].split()[1]) + int(f.readline()[34:42].split()[2])
    

    它转到文件的下一行,它不会添加同一行的3个数字,我想将它们加在一起。

4 个答案:

答案 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时,它会读取下一行

参考