繁体   English   中英

其中哪一个更像python?

[英]Which of these is more python-like?

我正在探索一些以前从未使用过的语言,使用一个简单的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的人会喜欢什么。

Pythonic解决方案可能有点像@Bogdan,但使用zip和参数解压缩

workflowname, paramname, value = zip(*[line.split(',') for line in lines])

但是,如果确定要使用for构造,则1st更好。

在您的两次尝试中,第二次对我没有任何意义。 也许会用其他语言。 因此,从您提出的两种方法中,第一种更好。

我仍然认为,pythonic的方式会像Matt Luongo所建议的那样。

博格丹的答案是最好的。 通常,如果需要循环计数器(在这种情况下不需要),则应使用enumerate而不是增加计数器:

for index, value in enumerate(lines):
    # do something with the value and the index

版本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(",")) ) 

(此外,nitpick:4空格制表符比8空格要好。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM