0

我有这段原始代码:

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”,但我仍然不喜欢我实际上必须执行一次额外迭代的事实。这可能是一个疯狂的问题,但是有没有人知道我可以在一个迭代/行中更有效地完成这种理解的方法?

4

3 回答 3

2

尝试这个:

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

不能说效率,但它一个班轮。

于 2013-03-01T11:27:57.480 回答
2
from itertools import islice
self.newList = [x.rstrip() for x in islice(rawFile, 1, None, 2)]
self.timestamp = ['0'] * len(self.newlist)
于 2013-03-01T11:32:56.447 回答
1

由于您正在寻找更多 Pythonic 的东西,因此这是我的建议:

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

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

于 2013-03-01T11:43:15.440 回答