我有两个列表 ListA 和 ListB 如下:
ListA=['1','1','2','2','2','3','4','4','5','5','5','5']
ListB=['1','5']
我想提出列表C ,其长度与列表A 相同,但用列表A 替换为列表A 中的数字'X'如果数字在列表B 中。我期待的结果是:
ListC=['X','X','2','2','2','3','4','4','X','X','X','X']
仅供参考, ListB 的长度将始终小于 ListA 的长度,而 ListB 将不会包含 >列表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)
显然这将创建一个List(listB X长度A的长度),而不仅仅是列表A的长度。是否有任何内置函数可以执行此操作?谁能给我一个线索怎么做?
答案 0 :(得分: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)
答案 1 :(得分:5)
每当您在同一list
上反复进行会员资格测试时,最好创建一个set
。虽然构建set
需要一些时间,但单个查找可以更快
SetB = set(ListB)
[i if i not in SetB else 'X' for i in ListA]
答案 2 :(得分:4)
列表理解是你的朋友:
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']
希望这有帮助!