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

2つ目は間違いなく「Pythonic」のように見えますが、実際に1回余分に反復する必要があるという事実はまだ嫌いです。これは厄介な質問かもしれませんが、この理解を1回の反復/行でより効率的に行う方法を知っている人はいますか?

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 に答える