如何从python中的列表中删除列表元素?

时间:2017-10-02 11:06:39

标签: python list

我有一个像这样的列表列表:

 [[1, 'Reason', [('reason',), ('other_reason',)]], [2, 'other', [('dep',), 
('path',)]], [3, "foo", [('bar',), ('bar1',)]] ]

我在一个函数中有这个列表,有时会按原样返回它(编辑模式),而在(显示详细信息)模式中将最后一个元素从最后一个位置更改为第一个位置,因此列表将如下: / p>

 [ [1, "foo", [('bar',), ('bar1',)]], [2, 'other', [('dep',), ('path',)]], 
[3, 'Reason', [('reason',), ('other_reason',)]]]

我想删除包含' Reason' (第一个例子中的第一个列表)。

我尝试使用list.index('Reason')方法来获取索引,但由于' Reason'不是列表中的元素。

索引也不一样,所以del list[0]不是一个好选择

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

此?

>>> l = [[1, 'Reason', [('reason',), ('other_reason',)]], [2, 'other', [('dep',), ('path',)]], [3, "foo", [('bar',), ('bar1',)]] ]>>>
>>> [e for e in l if 'Reason' not in e]
[[2, 'other', [('dep',), ('path',)]], [3, 'foo', [('bar',), ('bar1',)]]]
>>>

说明:这将从第一个列表构建一个新列表,将所有元素包含'Reason'之外的所有元素。

答案 1 :(得分:1)

[l for l in list if not "Reason" in l]

答案 2 :(得分:1)

我们假设“原因”发生了变化,因此请将其保存在变量删除中。 下面的代码操纵现有列表

l = [[1, 'Reason', [('reason',), ('other_reason',)]], [2, 'other', [('dep',), ('path',)]], [3, "foo", [('bar',), ('bar1',)]]]

removal = 'Reason'

for idx, nest_list in enumerate(l):
    if nest_list[1] == removal:
        del l[idx]

# to change element to first pos
l.insert(0, l[-1])
del l[-1]

然后迭代列表,查看子列表中位置1的项是否匹配。如果是,请将其从列表中删除。