实现这些python列表理解的有效方法

实现这些python列表理解的有效方法,python,iteration,variable-assignment,list-comprehension,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] sel

我有一段原始代码:

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))
不能说什么效率,但它是一条直线。

试试这个:

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)

关于效率,我没什么可说的,但这是一句简单的话。

既然你在寻找更具蟒蛇风格的东西,我的建议如下:

from itertools import islice
self.newList = [x.rstrip() for x in islice(rawFile, 1, None, 2)]
self.timestamp = ['0'] * len(self.newlist)
for lineno, line in enumerate(rawFile):
    if lineno % 2 == 0:
        self.newList.append(line.rstrip())
        self.timeStamp.append('0')

请注意,我故意不使用列表理解。尽管它们很好,但我认为它们在这个特殊情况下没有多大帮助。

既然您正在寻找更具蟒蛇风格的东西,下面是我的建议:

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

请注意,我故意不使用列表理解。尽管它们很棒,但我认为它们在这个特定的例子中没有多大帮助。

hmmm,很好地压缩了元组列表,但是
*
在那里做了什么?@eazar001它使
zip
输出两个单独的列表,而不是一堆两元素元组。它本质上是一个转置函数。非常好。。。巨蟒总是让我惊讶,谢谢你的帮助!嗯,压缩元组列表很好,但是
*
在那里做什么?@eazar001它使
zip
输出两个单独的列表,而不是一堆两元素元组。它本质上是一个转置函数。非常好。。。巨蟒总是让我惊讶,谢谢你的帮助!依我看,原始代码没有太大的错误。这很清楚,也很中肯。我唯一的改变就是使用
enumerate()
@NPE:是的,我知道。。。我只是想习惯python风格的编码,我一直把它作为一个宠物项目来学习,所以我想:“尽可能地理解。”——这同样适用于用python编写的代码和语言本身。这很清楚,也很中肯。我唯一的改变就是使用
enumerate()
@NPE:是的,我知道。。。我只是想习惯python风格的编码,我一直把它作为一个宠物项目来学习,所以我想:“尽可能地理解。”——这同样适用于用python编写的代码,也适用于语言本身。谢谢,尽管你的答案并不完全符合问题,但你是对的。。。这是最“蟒蛇式”的,也是最有效的。我也在最后的脚本中使用了你的解决方案。[=谢谢,虽然你的答案没有完全符合问题,但你是对的……这是最“Pythonic”的,也是最有效的。我在最后的脚本中也使用了你的解决方案[=