【问题标题】:How to remove lists from a list如何从列表中删除列表
【发布时间】:2020-05-07 01:02:51
【问题描述】:

我创建了一个列表,在其中我试图仅消除第一个值大于它的第二个值的列表。

我尝试使用要删除的元素创建第二个列表,但我认为这不是最佳方式。

#y = []

x = [[1, 4], [1, 6], [2, 5], [2, 7], [4, 8], [6, 5], [6, 7], [2, 6], [3, 7], [5, 8], [6, 4], [7, 5]]
for i in range(len(x)):
    if x[i][0] > x[i][1]:
        print(x[i])


#        y.append(x[i])

是否有最佳方法来实现这一目标?

我希望在屏幕上打印时获得以下信息:

[[1, 4], [1, 6], [2, 5], [2, 7], [4, 8], [6, 7], [2, 6], [3, 7], [ 5, 8]]

最好的问候,

【问题讨论】:

    标签: python python-3.x list for-loop


    【解决方案1】:

    这应该可行:

    y = [[a,b] for a,b in x if a <= b]
    

    测试:

    >>> x = [[1, 4], [1, 6], [2, 5], [2, 7], [4, 8], [6, 5], [6, 7], [2, 6], [3, 7], [5, 8], [6, 4], [7, 5]]
    >>> y = [[a,b] for a,b in x if a < b]
    >>> y
    [[1, 4], [1, 6], [2, 5], [2, 7], [4, 8], [6, 7], [2, 6], [3, 7], [5, 8]]
    >>> 
    

    【讨论】:

    • 应该是if a &lt;= b
    • @JoshuaHall 也许,OP 没有说什么,但你是对的,我做出了改变 =)
    【解决方案2】:

    这会修改原始列表:

    for i, (a, b) in enumerate(x):
        if a > b:
            del x[i]
    

    【讨论】:

      【解决方案3】:

      创建一个新列表:

      [v for v in x if v[0] <= v[1]]
      

      或就地消除:

      for i in range(len(x) - 1, -1, -1):  # need to start at the end
          if x[i][0] > x[i][1]:
              x.pop(i)
      

      【讨论】:

        【解决方案4】:
        >>> filtered = list(filter(lambda f: f[0] < f[1], x))
        >>> print(filtered)
        

        这将使用内置的filter(function, iterable) 函数创建一个包含所需值的新列表。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-26
          • 2013-06-14
          • 2021-05-24
          • 1970-01-01
          • 2021-03-10
          • 2021-07-19
          • 2015-09-20
          • 1970-01-01
          相关资源
          最近更新 更多