1

我有两个列表ListAListB如下:

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

我正在尝试提出与List A具有相同长度的List C但如果List A 中的数字在 List B中,则将List A中的数字替换为“X”。我期待的结果:

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

仅供参考,ListB的长度将始终小于 ListA 的长度,并且ListB不会保存任何不在List 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)

显然,这将创建一个具有(listB 长度 X 长度 A)的列表,而不仅仅是列表 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创建一个set. 尽管构建set单个查找需要一些时间,但速度可能会快得多

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

List Comprehension 是您在这方面的朋友:

ListA=['1','1','2','2','2','3','4','4','5','5','5','5']
ListB=['1','5']
ListC = [i if i not in ListB else 'x' for i in ListA]

--> ['x', 'x', '2', '2', '2', '3', '4', '4', 'x', 'x', 'x', 'x']

希望这可以帮助!

于 2013-05-15T02:47:19.730 回答