我正在探索以前没有用过的各种语言,使用简单的Perl脚本作为我想要完成的事情的基础。我有几个版本的东西,我很好奇哪个是使用Python时的首选方法 - 或者两者都不是,是什么?
版本1:
workflowname = []
paramname = []
value = []
for line in lines:
wfn, pn, v = line.split(",")
workflowname.append(wfn)
paramname.append(pn)
value.append(v)
第2版:
workflowname = []
paramname = []
value = []
i = 0;
for line in lines:
workflowname.append("")
paramname.append("")
value.append("")
workflowname[i], paramname[i], value[i] = line.split(",")
i = i + 1
就个人而言,我更喜欢第二种,但是,正如我所说,我很好奇真正了解Python的人会更喜欢。
答案 0 :(得分:14)
Pythonic解决方案可能有点像@Bogdan的,但使用zip和参数解包
workflowname, paramname, value = zip(*[line.split(',') for line in lines])
如果您决定使用for构造,那么第一个更好。
答案 1 :(得分:4)
在你的两个考试中,第二个对我没有任何意义。也许在其他语言中它会。因此,从你提出的两个方面来看,第一个更好。
我仍然认为pythonic方式会像Matt Luongo所说的那样。
答案 2 :(得分:2)
enumerate
而不是递增一个计数器:
for index, value in enumerate(lines):
# do something with the value and the index
答案 3 :(得分:1)
版本1肯定比版本2更好(如果你只是要替换它,为什么要把一些东西放在列表中?)但是根据你以后计划要做的事情,两者都不是一个好主意。并行列表几乎从不比对象或元组列表更方便,所以我考虑:
# list of (workflow,paramname,value) tuples
items = []
for line in lines:
items.append( line.split(",") )
或者:
class WorkflowItem(object):
def __init__(self,workflow,paramname,value):
self.workflow = workflow
self.paramname = paramname
self.value = value
# list of objects
items = []
for line in lines:
items.append( WorkflowItem(*line.split(",")) )
(另外,挑剔:4个空格的标签优于8个空格。)