我有这段原始代码:
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”,但我仍然不喜欢我实际上必须执行一次额外的迭代。这可能是一个棘手的问题,但是有没有人知道我可以在一个迭代/行中更有效地完成这种理解的方式?
答案 0 :(得分:2)
试试这个:
self.newList, self.timeStamp = zip(*((x.rstrip(), '0') for i, x in enumerate(rawFile) if i%2==0))
不能说效率,但它 是一个单线。
答案 1 :(得分:2)
from itertools import islice
self.newList = [x.rstrip() for x in islice(rawFile, 1, None, 2)]
self.timestamp = ['0'] * len(self.newlist)
答案 2 :(得分:1)
由于你正在寻找更多Pythonic的东西,这是我的建议:
for lineno, line in enumerate(rawFile):
if lineno % 2 == 0:
self.newList.append(line.rstrip())
self.timeStamp.append('0')
请注意,我故意不使用列表推导。虽然它们很棒,但我不认为它们在这个特定情况下有很大帮助。