将列表分配到var的更好方法

Sri*_*aju 4 python

用Python编写代码.有一段代码,想知道它是否可以更优雅地完成......

# Statistics format is - done|remaining|200's|404's|size
statf = open(STATS_FILE, 'r').read()
starf = statf.strip().split('|')
done  = int(starf[0])
rema  = int(starf[1])
succ  = int(starf[2])
fails = int(starf[3])
size  = int(starf[4])
...
Run Code Online (Sandbox Code Playgroud)

这继续下去.我想知道在将行拆分成列表之后是​​否有更好的方法将每个列表分配到var中.我有近30行为vars分配索引值.只是想了解更多关于Python的信息......

leo*_*luk 6

done, rema, succ, fails, size, ... = [int(x) for x in starf]
Run Code Online (Sandbox Code Playgroud)

更好:

labels = ("done", "rema", "succ", "fails", "size")

data = dict(zip(labels, [int(x) for x in starf]))

print data['done']
Run Code Online (Sandbox Code Playgroud)


Gle*_*ard 5

到目前为止,我不喜欢的答案是,他们将所有内容都放在一个表达式中.您希望减少代码中的冗余,而不必立即执行太多操作.

如果该行上的所有项目都是整数,则将它们全部转换,这样您就不必int(...)每次都写入:

starf = [int(i) for i in starf]
Run Code Online (Sandbox Code Playgroud)

如果只有某些项目是整数 - 也许有些是字符串或浮点数 - 那么你可以转换那些:

for i in 0,1,2,3,4:
    starf[i] = int(starf[i]))
Run Code Online (Sandbox Code Playgroud)

分块是有用的; 如果你有很多项目 - 你说你有30个 - 你可以把它分开:

done, rema, succ = starf[0:2]
fails, size = starf[3:4]
Run Code Online (Sandbox Code Playgroud)