我有一个像这样的列表列表:
[[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]
不是一个好选择
有什么想法吗?
答案 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的项是否匹配。如果是,请将其从列表中删除。