我有一个这样的文件:(点是一些用于计算平均值的数字。)
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]
我的代码需要哪些更改?提前谢谢。
答案 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
此处字符串abc
和xyz
被压缩在一起,因此每次都会使用每个字符串中的一个元素。
此外,还会发生元组拆包。通过压缩字符串循环实际上为您提供了元组:
for x in zip('abc', 'xyz'):
print(x)
('a', 'x')
('b', 'y')
('c', 'z')
但是在第一次迭代中,a
和x
被分配了value1
和value2
:
>>> 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);