有效的方法来做这些python列表理解

时间:2013-03-01 11:20:54

标签: python iteration variable-assignment list-comprehension

我有这段原始代码:

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

3 个答案:

答案 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')

请注意,我故意不使用列表推导。虽然它们很棒,但我不认为它们在这个特定情况下有很大帮助。