3

私は2つのリストを持っています:

A = [1,2,3,4,5,6,7,8]
B = [2,3,4]

各インデックスの要素が、A の同じインデックスの要素がリスト B のどこかにあるかどうかを示す、length(A) のブール型リストを取得したい場合、戻り値は次のようになります。

[False, True, True, True, False, False, False, False] 

関数を書くのは簡単ですが、Python でパラダイム的な方法でそれを行う方法があるかどうかを知りたいです。

Rでは、対応するものは次のようになります

which(A %in% b)
4

3 に答える 3

9

リスト内包表記を使用します。

In [164]: A = [1,2,3,4,5,6,7,8]

In [165]: B = [2,3,4]

In [166]: [x in B for x in A]
Out[166]: [False, True, True, True, False, False, False, False]

が巨大な場合Bは、最初に変換することをお勧めしsetます。同様に、セットのメンバーシップ テストはリスト内O(1) と比較さO(n)れます。

In [167]: b=set(B)

In [168]: [x in b for x in A]
Out[168]: [False, True, True, True, False, False, False, False]
于 2013-01-20T23:17:24.970 に答える
4
In [1]: A = [1,2,3,4,5,6,7,8]

In [2]: B = [2,3,4]

In [3]: map(B.__contains__, A)
Out[3]: [False, True, True, True, False, False, False, False]
于 2013-01-20T23:38:02.837 に答える
3

それを書く別の方法(ただし、ラムダの使用により遅くなります):

>>> A = [1,2,3,4,5,6,7,8]
>>> B = [2,3,4]
>>> S = set(B)
>>> map(lambda x: x in S, A)
[False, True, True, True, False, False, False, False]
于 2013-01-20T23:21:06.863 に答える