リスト内の正の数だけ欲しい

Python filter lambda – how many items were reduced while reducing – StackOverflow

質問が物凄く不明瞭でなぞなぞみたい.
コメント欄と回答をみるに,正の数を任意の数ピックアップしたい的な.

こういうときは,ジェネレータを使えば良い.

def positive_num(x, n):
    cnt = 0
    for e in x:
        if e > 0 and cnt < n:
            yield e
            cnt += 1


numbers = [1, -1, 2, -2, 3, -3, 4, -4, 5, -5, 6, -6]

list(positive_num(numbers, 3))

[1, 2, 3]

import itertools

top3 = itertools.islice(filter(lambda x: x > 0, numbers), 3)
print(list(top3))

[1, 2, 3]

%timeit itertools.islice(filter(lambda x: x > 0, numbers), 3)
%timeit positive_num(numbers, 3)

742 ns ± 26.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
452 ns ± 7.56 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

広告
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中