从python中的列表列表中删除列表项

时间:2017-04-16 19:10:34

标签: python list loops nested

我有一个字符列表:

Char_list = ['C', 'A', 'G']

和列表清单:

List_List = [['A', 'C', 'T'], ['C', 'A', 'T', 'G'], ['A', 'C', 'G']]

我想从Char_list[i]中的相应索引i列表中删除每个List_List

输出必须如下:

[['A','T'], ['C', 'T', 'G'], ['A', 'C']] 
我正在尝试的是:

for i in range(len(Char_list)):
    for j in range(len(List_List)):
        if Char_list[i] in List_List[j]:
            List_List[j].remove(Char_list[i])
print list_list

但是从上面的代码中删除了所有列表中的每个字符。

如何仅从Char_list[i]中的相应列表中删除List_list

3 个答案:

答案 0 :(得分:6)

不是使用显式索引,zip将两个列表放在一起,而是应用列表推导来过滤掉每个位置的不需要的字符。

>>> char_list = ['C', 'A', 'G']
>>> list_list = [['A', 'C', 'T'], ['C','A', 'T', 'G'], ['A', 'C', 'G']]
>>> [[x for x in l if x != y] for l, y in zip(list_list, char_list)]
[['A', 'T'], ['C', 'T', 'G'], ['A', 'C']]

答案 1 :(得分:4)

您可以将enumerate与嵌套列表理解表达式一起使用为:

>>> char_list = ['C', 'A', 'G']
>>> nested_list = [['A', 'C', 'T'], ['C', 'A', 'T', 'G'], ['A', 'C', 'G']]

>>> [[j for j in i if j!=char_list[n]] for n, i in enumerate(nested_list)]
[['A', 'T'], ['C', 'T', 'G'], ['A', 'C']]

我还建议你看看PEP 8 - Naming Conventions。您不应该使用带有变量名称的大写第一个字母。

答案 2 :(得分:0)

Char_list = ['C', 'A', 'G']
List_List = [['A', 'C', 'T'], ['C', 'A', 'T', 'G'], ['A', 'C', 'G']]
for i in range(len(Char_list)):
    List_List[i].remove(Char_list[i])
print(List_List)    

<强>输出

[['A', 'T'], ['C', 'T', 'G'], ['A', 'C']]

如果字符在嵌套列表中重复,请使用此

Char_list = ['C', 'A', 'G']
List_List = [['A', 'C','C','C', 'T'], ['C', 'A', 'T', 'G'], ['A', 'C', 'G']]
for i in range(len(Char_list)):
    for j in range(List_List[i].count(Char_list[i])):
        List_List[i].remove(Char_list[i])
print(List_List)