[英]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.