Python 如何检查列表的子列表是否包含一项,如果是,如何删除它?

Python 如何检查列表的子列表是否包含一项,如果是,如何删除它?,python,Python,我有一个类似这样的列表 mylist = [[['add', 'vertex', 'all', 'source', 'destination'], ['add', 'all', 'edge', 'source', 'destination']], [['add', 'vertex', 'all', 'source', 'destination']], [['destination', 'add', 'source', 'graph'], ['destination', 'add', 'edge'

我有一个类似这样的列表

mylist = [[['add', 'vertex', 'all', 'source', 'destination'], ['add', 'all', 'edge', 'source', 'destination']], [['add', 'vertex', 'all', 'source', 'destination']], [['destination', 'add', 'source', 'graph'], ['destination', 'add', 'edge', 'source']], [['return', 'modify']], [['modify'], ['modify'], ['modify']], [['destination', 'graph']]]
我想删除子列表
[['modify'],['modify'],['modify']]
,因为它只有一个元素(该子列表中的所有一个元素)

删除后,我有一个索引列表,如下所示:

index_list = [[0, [1, 2]], [1, [1]], [2, [0, 2]], [3, [3]], [4, [1, 2, 3]], [5, [0]]]
index_list = [[0, [1, 2]], [1, [1]], [2, [0, 2]], [3, [3]], [4, [1, 2, 3]], [5, [0]]]
mylist
index\u列表的关系

[0, [1, 2]]
其中1与

['add', 'vertex', 'all', 'source', 'destination']
['add', 'all', 'edge', 'source', 'destination']
第二部分涉及

['add', 'vertex', 'all', 'source', 'destination']
['add', 'all', 'edge', 'source', 'destination']
由于删除了
['modify'],['modify'],['modify']
,我想将
[4,1,2,3]
更新为
[4,[]]

输入

预期产量

index_list = [[0, [1, 2]], [1, [1]], [2, [0, 2]], [3, [3]], [4, []], [5, [0]]]

这是一种使用简单迭代的方法

Ex:

mylist = [[['add', 'vertex', 'all', 'source', 'destination'], ['add', 'all', 'edge', 'source', 'destination']], [['add', 'vertex', 'all', 'source', 'destination']], [['destination', 'add', 'source', 'graph'], ['destination', 'add', 'edge', 'source']], [['return', 'modify']], [['modify'], ['modify'], ['modify']], [['destination', 'graph']]]
index_list = [[0, [1, 2]], [1, [1]], [2, [0, 2]], [3, [3]], [4, [1, 2, 3]], [5, [0]]]
todelete = [['modify'], ['modify'], ['modify']]
for i, v in enumerate(mylist):
    if v == todelete:
        mylist[i] = []
        index_list[i][-1] = []

print(mylist)
print("---")
print(index_list)
[[['add', 'vertex', 'all', 'source', 'destination'],
  ['add', 'all', 'edge', 'source', 'destination']],
 [['add', 'vertex', 'all', 'source', 'destination']],
 [['destination', 'add', 'source', 'graph'],
  ['destination', 'add', 'edge', 'source']],
 [['return', 'modify']],
 [],
 [['destination', 'graph']]]
---
[[0, [1, 2]], [1, [1]], [2, [0, 2]], [3, [3]], [4, []], [5, [0]]]
输出:

mylist = [[['add', 'vertex', 'all', 'source', 'destination'], ['add', 'all', 'edge', 'source', 'destination']], [['add', 'vertex', 'all', 'source', 'destination']], [['destination', 'add', 'source', 'graph'], ['destination', 'add', 'edge', 'source']], [['return', 'modify']], [['modify'], ['modify'], ['modify']], [['destination', 'graph']]]
index_list = [[0, [1, 2]], [1, [1]], [2, [0, 2]], [3, [3]], [4, [1, 2, 3]], [5, [0]]]
todelete = [['modify'], ['modify'], ['modify']]
for i, v in enumerate(mylist):
    if v == todelete:
        mylist[i] = []
        index_list[i][-1] = []

print(mylist)
print("---")
print(index_list)
[[['add', 'vertex', 'all', 'source', 'destination'],
  ['add', 'all', 'edge', 'source', 'destination']],
 [['add', 'vertex', 'all', 'source', 'destination']],
 [['destination', 'add', 'source', 'graph'],
  ['destination', 'add', 'edge', 'source']],
 [['return', 'modify']],
 [],
 [['destination', 'graph']]]
---
[[0, [1, 2]], [1, [1]], [2, [0, 2]], [3, [3]], [4, []], [5, [0]]]

使用反转以避免索引错误

for k,i in enumerate(mylist):
    for k2,j in reversed(list(enumerate(i))):
        if len(j)==1:
            del mylist[k][k2]
            del index_list[k][1][k2]

还有一种方法:

for (i,j),(k,l) in zip(enumerate(mylist), enumerate(index_list)):
    new_sub_itm = [m for m in j if len(m)!=1]
    if not new_sub_itm:
        index_list[k][1] = []
        mylist[i] = []
由于您的
mylist
index\u列表的长度相同,您可以将它们都枚举,然后快速移动,然后检查子列表是否只包含一项。如果每个子列表中只包含一个项目,
new_sub_itm
将是一个空列表
[]
。您可以使用索引从
mylist
中删除该项,也可以更改
index\u列表中的第二项

输出

# index_list
[[0, [1, 2]], [1, [1]], [2, [0, 2]], [3, [3]], [4, []], [5, [0]]]
# mylist
[[['add', 'vertex', 'all', 'source', 'destination'], ['add', 'all', 'edge', 'source', 'destination']], [['add', 'vertex', 'all', 'source', 'destination']], [['destination', 'add', 'source', 'graph'], ['destination', 'add', 'edge', 'source']], [['return', 'modify']], [['destination', 'graph']]]

您想根据哪个条件删除
[['modify']、['modify']、['modify']]
?所有子列表只包含一项或所有子列表包含相同的项或两个条件?我没有得到
mylist
index\u list
的关系。你是如何得到
[2[0,2]]
的?我不知道你想做什么。但是我有一个预感,它可以用一种更简单的方式来完成!!当你写完你现在正在写的任何东西后,我建议把你的完整代码发布在我很确定有更好的方法来实现你想要的。那些三层嵌套索引列表看起来不太合适。如果两个列表相关,我建议创建一个结构。字典似乎是一个不错的选择:
{k[0]:{sk:sv代表sk,sv在zip中(k[1],v)}代表k,v在zip中(index_list,mylist)}
它应该只在所有子列表都有1项时删除;另外,
del mylist[i]
应该是
mylist[i]=[]