【问题标题】:Remove a list in a list of lists based on condition根据条件删除列表列表中的列表
【发布时间】:2022-12-23 12:09:50
【问题描述】:

我有以下列表列表:

lst = [['a',102, True],['b',None, False], ['c',100, False]]

我想删除第二个位置的值为 None 的所有列表。我该怎么做(在列表理解中)

我尝试了几种不同的列表理解,但似乎无法弄清楚。谢谢!

【问题讨论】:

  • 看起来 lst 是一个包含嵌套元组的元组,您需要确认它们是列表还是元组。
  • 元组是不可变的。删除元组的元素是不可能的。现在,您可以遍历元组并创建一个新的元组,并过滤​​掉所需的值。
  • @MichaelM。我滚了回去。问题的哪一部分是对的,哪一部分是错的,不是由我们来决定的。 (即,它们是否有列表或元组。)

标签: python


【解决方案1】:

用这个:

lst = (('a',102, True),('b',None, False), ('c',100, False))
lst = tuple([el for el in lst if el[1] is not None])
print(lst)  # => (('a', 102, True), ('c', 100, False))

您的数据是元组的元组,而不是列表的列表,因此您需要在最后将其转换为元组。

【讨论】:

  • OP的问题和预期输出尚不清楚
  • @MichaelDelgado 哎呀,对不起。我已经更新了我的答案。
  • 无需使用列表理解。您可以将生成器表达式传递给tuplelst = tuple(el for el in lst if el[1] is not None)
【解决方案2】:

试试这个:

lst = [item for item in lst if item[1] is not None]

【讨论】:

    【解决方案3】:

    如果内部元组的索引 1(第二个位置)中的元素不等于 None,则使用 filterlambda 生成新元组:

    lst = tuple(filter(lambda i: i[1] != None, lst))
    
    # (('a', 102, True), ('c', 100, False))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2021-12-14
      • 1970-01-01
      • 2011-11-29
      • 2018-10-12
      • 1970-01-01
      • 2017-01-15
      相关资源
      最近更新 更多