在Python中,从列表中的列表中删除列表项

4

我有一个字符列表:

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

还有一个列表的列表:

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

我希望你能够从List_List中删除每个索引为i的对应列表中的Char_list[i]
输出必须如下所示:
[['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

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

我该如何只从List_list中对应的列表中删除Char_list[i]


1
规格,示例,尝试 - 那个踩踏是太严厉了。 - timgeb
3个回答

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

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 - 命名规范。您不应该在变量名称中使用大写的首字母。


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)

1
我建议使用 enumerate 而不是 range(len(...)。请注意,此解决方案仅删除了不必要的字符一次(我不知道 OP 是否需要这样做)。 - timgeb
谢谢你的帮助。这正是我想要的。我需要仅一次删除每个不必要的字符。 - say.ff
如果@yas.f的回答对您有帮助,请随意点赞。但我建议使用其他答案,因为它们有更好的方法 :) - jophab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接