1

次のように、 ListAListBの 2 つのリストがあります。

ListA=['1','1','2','2','2','3','4','4','5','5','5','5']
ListB=['1','5']

リスト Aと同じ長さのリスト Cを作成しようとしていますが、リスト A の数字がリスト Bにある場合は、リスト Aの数字を「X」に置き換えます。期待する結果:

ListC=['X','X','2','2','2','3','4','4','X','X','X','X']

参考までに、 ListBの長さは常にListAの長さよりも短く、ListBList Aにない数値を保持しません。

私はこのように試しました:

ListA=['1','1','2','2','2','3','4','4','5','5','5','5']
ListB=['1','5']
ListC=[]
for items in ListB:
    for a in ListA:
        if items==a:
            ListC.append('X')
        else:
            ListC.append(a)

明らかに、これはリスト A の長さだけでなく、(listB の長さ X 長さ A) を持つリストを作成します。この操作を行う組み込み関数はありますか? 誰かがそれを行う方法の手がかりを教えてもらえますか?

4

3 に答える 3

6

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

[i if i not in ListB else 'X' for i in ListA]

現在のコードを修正するには、 を使用inしてアイテムが にあるかどうかを確認しますListB

for item in ListA:
    if item in ListB:
        ListC.append('X')
    else:
        ListC.append(item)
于 2013-05-15T02:45:54.217 に答える
5

同じ でメンバーシップ テストを何度も行う場合は常に、listを作成することをお勧めしますsetset個々のルックアップを作成するには時間がかかりますが、はるかに高速になる可能性があります

SetB = set(ListB)
[i if i not in SetB else 'X' for i in ListA]
于 2013-05-15T02:54:50.107 に答える