【问题标题】:remove list items from list of list in python从python中的列表列表中删除列表项
【发布时间】:2017-09-12 10:54:36
【问题描述】:

我有一个字符列表:

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]

【问题讨论】:

  • 规格,例如,尝试 - 反对票是苛刻的。

标签: python list loops nested


【解决方案1】:

而不是使用显式索引,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']]

【讨论】:

    【解决方案2】:

    您可以将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。您不应该在变量名中使用大写的第一个字母。

    【讨论】:

      【解决方案3】:
      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)
      

      【讨论】:

      • 我建议使用enumerate 而不是range(len(...。请注意,此解决方案仅删除一次不需要的字符(我不知道这是否是 OP 想要的)。
      • 感谢您的帮助。这正是我想要的。我只需要删除每个不需要的字符一次。
      • @yas.f 如果对您有帮助,请随时为答案投票。但我建议使用其他答案,因为他们有更好的方法:)
      猜你喜欢
      • 2022-12-20
      • 2020-01-23
      • 1970-01-01
      • 2017-11-02
      • 2020-10-06
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多