哪一个更像蟒蛇?

时间:2012-02-02 14:42:56

标签: python

我正在探索以前没有用过的各种语言,使用简单的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的人会更喜欢。

4 个答案:

答案 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个空格。)