【问题标题】:Trimming lists using a loop使用循环修剪列表
【发布时间】:2010-06-16 16:34:28
【问题描述】:

我有几个类似的列表:

a = [1, 2, 3, 4, 5]
b = [4, 6, 5, 9, 2]
c = [4, 7, 9, 1, 2]

我想用一个循环来修剪它们,而不是像下面这样:

a[-2:]
b[-2:]
c[-2:]

我尝试过但对按值传递或按引用传递的基本原理感到困惑,我也研究了其他问题,但没有任何帮助。

谢谢

【问题讨论】:

    标签: python list


    【解决方案1】:
    for l in [a, b, c]:
        del l[-2:]
    

    这会从每个列表中删除最后两个元素。如果您只想删除除最后两个元素之外的所有元素,请执行以下操作:

    for l in [a, b, c]:
        del l[:-2]
    

    这里无需担心引用; for 循环迭代的列表包含对abc 的引用,并且每个列表通过删除列表切片就地变异。

    【讨论】:

      【解决方案2】:
      x = [a, b, c]
      x = map(lambda lst: lst[-2:], x)   
      

      【讨论】:

      • 在 Python 3.x 中,这会将迭代器存储在 x 而不是另一个列表中(map 在 Python 3.x 中返回迭代器)。
      【解决方案3】:

      使用循环从现有列表中删除不需要的项目:

      for list in [a, b, c]:
         del a[:-2]
      

      或者,使用列表推导式创建仅包含正确项目的新列表:

      (a, b, c) = [x[-2:] for x in (a, b, c)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-11
        相关资源
        最近更新 更多