假设我们有一个像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
我该如何处理?任何示例或指向某些教程的链接都非常感谢。
答案 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)
答案 5 :(得分:0)
首先,永远不要写这个:for x in range(len(a))
。它工作正常,但在Python社区中并不受欢迎。
Python可以遍历数组本身,使用for element in lst
。然而,后一种结构不允许删除元素,但是有很多方法可以在没有for
语句的情况下遍历列表,即:
[f(x) for x in lst if g(x)]
map()
,filter()
,all()
:https://docs.python.org/2/library/functions.html或itertools
删除元素有几种方法:
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]
选择。