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