【问题标题】:python - delete item from list of tuple by index [duplicate]python - 按索引从元组列表中删除项目[重复]
【发布时间】:2016-04-22 04:20:36
【问题描述】:

我想从具有给定索引值的元组列表中删除元素。

输入[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]

要完成的任务
删除给定索引处的项目:2,3

所需的输出: [(1, 2), (3, 4), (9, 10)]

我已经尝试了以下代码:

list(numpy.delete(input, [3,2]))  

但我得到以下输出: [1, 2, 5, 6, 7, 8, 9, 10]

请建议我解决此案的可能方法。

【问题讨论】:

    标签: python list numpy tuples


    【解决方案1】:

    numpy: 指定多维数组的轴

    你用 numpy 做的很接近,但你使用了错误的轴。如果你指定axis=0,你会得到你想要的结果。

    >>> import numpy as np
    >>> l = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]  
    >>> l = np.array(l)
    >>> l
    array([[ 1,  2],
           [ 3,  4],
           [ 5,  6],
           [ 7,  8],
           [ 9, 10]])
    >>> np.delete(l, [2,3], axis=0)
    array([[ 1,  2],
           [ 3,  4],
           [ 9, 10]])
    

    原版 Python

    对于逐步改变列表的操作,按索引的降序排列很重要,例如[3, 2] 而不是 [2, 3]

    pop()

    >>> l = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]  
    >>> l.pop(3)
    (7, 8)
    >>> l.pop(2)
    (5, 6)
    >>> l
    [(1, 2), (3, 4), (9, 10)]
    

    del

    >>> l = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]  
    >>> for i in [3, 2]:
    ...     del l[i]
    ... 
    >>> l
    [(1, 2), (3, 4), (9, 10)]
    

    remove()

    >>> l = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]  
    >>> remove_list = [l[2], l[3]]
    >>> remove_list
    [(5, 6), (7, 8)]
    >>> for r in remove_list:
    ...     l.remove(r)
    ... 
    >>> l
    [(1, 2), (3, 4), (9, 10)]
    

    【讨论】:

      【解决方案2】:

      list.pop() 将删除选定的元素。它们必须以相反的顺序完成,以免修改后面的位置。

      list.pop(3)
      list.pop(2)
      

      【讨论】:

      • 关闭,你需要先pop(3),因为pop(2)在被删除元素之后重新编号所有元素。
      【解决方案3】:

      你可以使用del:

      del mylist[index]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 2013-08-03
        • 1970-01-01
        相关资源
        最近更新 更多