python中的列表和文件操作

时间:2016-01-02 00:00:55

标签: python list file

我有一个这样的文件:(点是一些用于计算平均值的数字。)

Ashe: .....
Azok: .....
Bumba: .....
Thrall: .....

我有列表averages,每行有一个条目(第一个是Ashe的;第二个是; Azok的......)

averages = [12.4, 44.8880001, 32.4, 97.701]

我用这段代码分割名字:

for line in inp:
    line = line.split(": ")[0:1]

当我试图追加每个名字和平均值的第一个元素(第二个和第二个......)时:

for line in inp:
    line = line.split(": ")[0:1]
    #print(line)
    for d in averages:
        line.append(d)
    print(line)

我的输出是这样的:

['Ashe', 12.4, 44.8880001, 32.4, 97.701]
['Azok', 12.4, 44.8880001, 32.4, 97.701]
['Bumba', 12.4, 44.8880001, 32.4, 97.701]
['Thrall', 12.4, 44.8880001, 32.4, 97.701]

但是,预期的输出是:

['Ashe', 12.4]
['Azok', 44.8880001]
['Bumba', 32.4]
['Thrall', 97.701]

我的代码需要哪些更改?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您需要同时迭代每一行和每个平均值。最简单的方法是使用zip()

for line, avg in zip(inp, averages):
    line = line.split(":")[:1]
    line.append(avg)
    print(line)


['Ashe', 12.4]
['Azok', 44.8880001]
['Bumba', 32.4]
['Thrall', 97.701]

例如:

for value1, value2 in zip('abc', 'xyz'):
    print(value1, value2)

a x
b y
c z

此处字符串abcxyz被压缩在一起,因此每次都会使用每个字符串中的一个元素。

此外,还会发生元组拆包。通过压缩字符串循环实际上为您提供了元组:

for x in zip('abc', 'xyz'):
    print(x)

('a', 'x')
('b', 'y')
('c', 'z')

但是在第一次迭代中,ax被分配了value1value2

>>> value1, value2 = ('a', 'x')
>>> value1
'a'
>>> value2
'x'

在第二个:

>>> value1, value2 = ('b', 'y')
>>> value1
'b'
>>> value2
'y'

答案 1 :(得分:0)

您应该按照averages中列出的顺序将每个名称映射到for index, line in enumerate(inp): line = line.split(": ")[0:1] line.append(averages[index]) print(line) 中的每个值:

假设名称总数等于平均列表长度

setInterval(function () {
    var exampleVar;
    exec('cat /path/to/unimportant/file', function (error, stdout, stderr) { // This function returns errors, stdout and stderr
        console.log(stdout); // correct value
        exampleVar = stdout;
        console.log(exampleVar); // correct value
    }
    console.log(exampleVar); // undefined
}, unimportantTime);