繁体   English   中英

执行这些python列表推导的有效方法

[英]Efficient way to do these python list comprehensions

我有这段原始代码:

for x in rawFile:
    line += 1
    if line%2 == 0:
        self.newList.append(x.rstrip())
        self.timeStamp.append('0')

然后,我看到了它的丑陋程度,并希望通过列表理解来完成它,因此我将其重写为:

self.newList = [x[1].rstrip() for x in enumerate(rawFile) if x[0]%2 == 0]
self.timeStamp = ['0' for x in self.newList[]]

虽然第二个绝对对我来说似乎更像“ pythonic”,但我仍然不喜欢实际上必须执行一个额外迭代的事实。 这可能是一个棘手的问题,但是有人知道我可以在一个迭代/一行中更有效地完成此理解的方法吗?

尝试这个:

self.newList, self.timeStamp = zip(*((x.rstrip(), '0') for i, x in enumerate(rawFile) if i%2==0))

不能说什么效率,但它一个衬垫。

from itertools import islice
self.newList = [x.rstrip() for x in islice(rawFile, 1, None, 2)]
self.timestamp = ['0'] * len(self.newlist)

既然您正在寻找更Pythonic的东西,这是我的建议:

for lineno, line in enumerate(rawFile):
    if lineno % 2 == 0:
        self.newList.append(line.rstrip())
        self.timeStamp.append('0')

请注意,我故意不使用列表推导。 尽管它们很棒,但我认为在特定情况下它们没有太大帮助。

暂无
暂无

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

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