Python列表操作

时间:2013-05-15 02:41:57

标签: python list operation

我有两个列表 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的长度。是否有任何内置函数可以执行此操作?谁能给我一个线索怎么做?

3 个答案:

答案 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']

希望这有帮助!