ホームページ >バックエンド開発 >Python チュートリアル >Python でシーケンス内の要素をフィルターする方法

Python でシーケンス内の要素をフィルターする方法

不言
不言転載
2018-10-22 17:20:482504ブラウズ

この記事の内容は、Python がシーケンス内の要素をどのようにフィルタリングするかについてです。一定の参考値があります。必要な友人が参照できます。お役に立てれば幸いです。

1. 要件

シーケンスにはいくつかのデータが含まれており、特定の基準に従って値を抽出するか、シーケンスを削除する必要があります。

2. 解決策

シーケンス内のデータをフィルター処理するには、通常、リスト内包表記を使用するのが最も簡単な方法です。


例:

myList=[1,4,-5,10,-7,2,3,-1]
print([n for n in myList if n>0])
print([n for n in myList if n<0])

結果:

[1, 4, 10, 2, 3]
[-5, -7, -1]

リスト内包表記を使用する場合の潜在的な欠点は、元の入力が非常に大きい場合に、リスト内包表記を使用すると、の巨大な結果。これが考慮する必要がある問題である場合は、ジェネレータ式を使用して、反復メソッドを通じてフィルタリング結果を生成できます。次に例を示します。

myList=[1,4,-5,10,-7,2,3,-1]
pos=(n for n in myList if n >0)
for x in pos:
    print(x)

結果:

1
4
10
2
3

フィルタリング基準を使用できない場合があります。リスト内包表記またはジェネレーター式で単純に表現されます。例: スクリーニング プロセスに例外処理やその他の複雑な詳細が含まれるとします。これに基づいて、フィルタリング ロジックを処理するコードを別の関数に配置し、組み込みの filter() 関数を使用してそれを処理できます。例は次のとおりです:

values=['1','2','-3','-','4','N/A','5']
def is_int(val):
    try:
        x=int(val)
        return True
    except ValueError:
        return False

ivals=list(filter(is_int,values))
print(ivals)

Result:

['1', '2', '-3', '4', '5']

filter() イテレータが作成されるため、結果をリストとして取得したい場合は、例のように list() を必ず含めてください。

3. 分析

リスト内包表記とジェネレータ式は、通常、データをフィルタリングする最も簡単かつ直接的な方法です。さらに、データを同時に変換する機能もあります。例:

import math
myList=[1,4,-5,10,-7,2,3,-1]
print([math.sqrt(n) for n in myList if n>0])

結果:

[1.0, 2.0, 3.1622776601683795, 1.4142135623730951, 1.7320508075688772]

データのフィルタリングに関して、条件を満たさない値を破棄するのではなく、新しい値に置き換える状況があります。例えば。正の整数を見つけるだけでなく、指定された範囲内の要件を満たさない値を置換することもできます。多くの場合、これは、次のようにフィルター基準を条件式に移動することで簡単に実現できます。

myList=[1,4,-5,10,-7,2,3,-1]
print([n if n>0 else 0 for n in myList])
print([n if n<0 else 0 for n in myList])

結果:

[1, 4, 0, 10, 0, 2, 3, 0]
[0, 0, -5, 0, -7, 0, 0, -1]

言及する価値のあるもう 1 つのフィルター ツールは、itertools .compress() です。反復可能であり、入力としてのブールセレクターのシーケンス。出力では、対応するブール セレクターで True であるすべての反復可能なオブジェクト要素が与えられます。これは、あるシーケンスのフィルターの結果を別の関連するシーケンスに適用する場合に便利です。

例:

from itertools import compress
address=[
&#39;5412 N CLARK1&#39;,
&#39;5148 N CLARK2&#39;,
&#39;5800 E CLARK3&#39;,
&#39;2122 N CLARK4&#39;,
&#39;5645 M CLARK5&#39;,
&#39;1060 W CLARK6&#39;,
]
counts=[0,3,10,4,1,7]
#构建一个列表,它相应的count值要大于5
more5=[n>5 for n in counts]
print(more5)

print(list(compress(address,more5)))

結果:

[False, False, True, False, False, True]
['5800 E CLARK3', '1060 W CLARK6']

ここで重要なのは、まずどの要素が条件を満たすかを表すブール シーケンスを作成してから、compress() 関数を作成することです。ブール値が True である対応する要素を選択します。

filter() 関数と同様に、compress() は通常の状況ではイテレータを返します。したがって、必要に応じて、 list() を使用して結果をリストに変換する必要があります。

以上がPython でシーケンス内の要素をフィルターする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。