1

私は次のlist_Aを持っています:

['0', '1', '2', '3', '4', '5', '6', '7']

そして、この他のlist_B:

['2','6','7']

これを確認したいと思います:「list_A」の各要素について、「list_B」の要素の1つである場合

そう:

for 0 <-> are you one of these? ['2','6','7']
for 1 <-> are you one of these? ['2','6','7']
for 2 <-> are you one of these? ['2','6','7']

そして最後に、要素数に関しては「list_A」と同じですが、次のようなマップのような「list_C」を作成したいと思います。

['-1', '-1', '2', '-1', '-1', '-1', '6', '7']

つまり、一致しない要素ごとに「-1」、一致する要素ごとに「自己」です。明らかに、サイクルごとに2つの入れ子でこれを行っていますが、機能します:

myStateMap = []

for a in list_A:
    elementString = -1
    for b in list_B:
        if a == b:
            # Update the elementString in case of a match
            elementString = a
            print "\tMatch"
        else:
            pass
            print "\tNO Match!"
    # Store the elementString
    myStateMap.append(elementString)

問題は、これをどのように最適化するかです。より短く、より効率的にするにはどうすればよいでしょうか。

4

4 に答える 4

4

リスト内包表記を使用できます:

>>> [('-1' if item not in list_B else item) for item in list_A]
['-1', '-1', '2', '-1', '-1', '-1', '6', '7']
于 2013-11-07T13:55:08.563 に答える
0

他のものとは少し異なる別の短いリスト内包表記の例を次に示します。

a=[1,2,3,4,5,6,7]
b=[2,5,7]
c=[x * (x in b) for x in a]

これは を与えc = [0, 2, 0, 0, 5, 6, 7]ます。リスト要素が実際に文字列のように見える場合、空の文字列''または元の文字列のいずれかを取得します。x in bこれは、元の値で乗算する前に、ブール値 ( ) を0またはに暗黙的に変換することを利用し1ます (文字列の場合、これは「連結の繰り返し」です)。

于 2013-11-07T16:06:35.633 に答える