如何在Python中从子数组中删除元素

时间:2015-02-03 17:38:21

标签: python arrays

假设我们有一个像a = [['a','b','c'], ['aber', 'jsfn', 'ff', 'fsf', '003'], [...] ...]这样的数组,其中每个元素的大小可以不同。我想要做的是删除每个子数组的最后一项,如果它与我设置的条件匹配。所以我有:

for x in range(len(a)):
    if the last item in x matches some condition that is set:
        then remove the last item from x

由于我正在处理数组,我尝试了a.remove(-1),但这是错误的。那么,有没有简单的方法呢?

举个例子,如果我有:

for x in range(len(a)):
        if the last element of each sub-array starts with an "S":
            then remove the last item from that sub-array

我该如何处理?任何示例或指向某些教程的链接都非常感谢。

6 个答案:

答案 0 :(得分:1)

Python列出了支持del,它是索引:

>>> l = [1,2]
>>> del l[-1]
[1]

.remove(value)删除第一个匹配值。

.pop(value)与remove相同,但它返回被删除的值,如果你没有给它一个值,它将“弹出”列表中的最后一项。

答案 1 :(得分:1)

这里有一个列表而不是数组。在此基础上,您可以执行以下操作:

a = [['a','b','c'], ['aber', 'jsfn', 'ff', 'fsf', '003'], ['d', 'Starts With S']]  

for sublist in a:
    if sublist[-1].startswith("S"):
        sublist.pop()

print a

运行时产生的结果:

[['a', 'b', 'c'], ['aber', 'jsfn', 'ff', 'fsf', '003'], ['d']]

答案 2 :(得分:0)

您可以将要删除的元素传递到remove(),或者如果您只想删除最后一个元素,请使用pop(),请参阅以下示例:

>>> a = [['a','b','c'], ['aber', 'jsfn', 'ff', 'fsf', '003']]
>>> a[0].remove(a[0][1])  # a[0][1] is 'b'
>>> a[0]
['a', 'c']
>>> a
[['a', 'c'], ['aber', 'jsfn', 'ff', 'fsf', '003']]
>>> a[1].pop()  # remove the last element of a[1]
'003'
>>> a
[['a', 'c'], ['aber', 'jsfn', 'ff', 'fsf']]

答案 3 :(得分:0)

这可能已经在这里回答了Remove object from a list of objects in python

但重申一下,你可以像这样弹出你想要的特定索引

for x in range(len(a)):
        if the last element of each element starts with an "S":
            array.pop(x)

答案 4 :(得分:0)

首先,如果您只关心数组中的最后一个元素,那么您不需要遍历整个事物。

只需检查数组中的最后一项是否以" S"开头,如果匹配则使用del a[-1]

类似问题被问到here

答案 5 :(得分:0)

首先,永远不要写这个:for x in range(len(a))。它工作正常,但在Python社区中并不受欢迎。

Python可以遍历数组本身,使用for element in lst。然而,后一种结构不允许删除元素,但是有很多方法可以在没有for语句的情况下遍历列表,即:

删除元素有几种方法:

  • lst.remove(value)删除所有等于值的元素
  • filter(pred, lst)删除与谓词pred匹配的所有元素,并返回"已过滤"名单。即lst = filter(lambda el: el[-1].startswith("S"), lst)如果最后一个元素以" S"开头,则会删除所有子列表。
  • lst.pop([i])lst[i] - 删除并返回索引为i的元素。对于pop索引是可选的 - 默认情况下它是最后一个元素
  • 切片阵列,因此它不包含所需的元素。即lst[:i]返回列表的元素,从0到i。因此,要删除最后一个元素,您只需编写lst = lst[:-1]
  • 即可

所以你的例子看起来像这样:

if all(el[-1].startswith("S") for el in a):
      a.pop() 

请注意,我没有围绕列表理解编写大括号 - 这是一种称为 generator comprehension 的特殊形式。

然而,您可以将for-else构造用于相同目的:

for el in a:
    if not el[-1].startswith("S"):
        # Last element of sublist is not starts with "S", do nothing
        break
else:
    # We walked over entire list and never called break, so 
    # all elements matched. Delete the last element!
    a = a[:-1]

选择。