Python迭代后删除项目

时间:2016-10-11 03:04:43

标签: python

为什么我的代码不起作用?我无法弄清楚

matchList = [['g', 'h', 'i'], ['a', 'b', 'c'] ... ]]
myList = []

for i in match_list:
    for j in i:
        for word in first_list:
            if j in word:
                myList.append(j)
                match_list.remove(j)

我收到错误ValueError: list.remove(x): x not in list

编辑:

first_list = ['i', 'am', 'an', 'old', 'man']

4 个答案:

答案 0 :(得分:2)

你想:

i.remove(j)

match_list是一个列表列表

答案 1 :(得分:0)

list_of_lists = [['g', 'h', 'i'], ['a', 'b', 'c'] ... ]]
first_list = ['i', 'am', 'an', 'old', 'man']

myList = []

for current_list in list_of_lists:
    for item in current_list:
        for word in first_list:
            if item in word:
                myList.append(item)
                list_of_lists.remove(item)

我编辑了你的代码,所以它会更明智地读给我,所以我觉得我知道你要做的是什么。

在我看来,你正在阅读列表,从一组列表中查看,以查看该“子列表”中的项是否在另一个列表中(first_list)。

如果该项目位于第一个列表中的某个单词中,您试图从list_of_lists中删除“子列表”,对吗?如果是这样,那就是你得到错误的地方。假设您正在进行列表集的第一次迭代,并且您正在检查list_of_lists中第一个子列表中的字母“i”是否位于first_list的第一个单词中。它应该评估为真。那时,您将以简单的英语告诉Python以下内容:“Python,从list_of_lists中删除值为i的项目。”但是,因为list_of_lists包含列表,所以列表不起作用,因为list_of_lists中的所有值都不是字符串,只是列表。

您需要做的是指定您当前正在迭代的列表,该列表将由上面代码中的current_list表示。

所以也许不是

list_of_lists.remove(item)

或者更确切地说是代码

match_list.remove(j) 

尝试

list_of_lists.remove(current_list) 

或者更确切地说是代码

match_list.remove(i).

我有一种感觉,你会遇到其他错误的迭代,如果你得到另一场比赛可能会留在某些场景中,但这不是你现在遇到的问题......

答案 2 :(得分:0)

试试这个:

btw:您在帖子中使用了matchListmatch_list。我纠正了这个问题,以使其保持一致。

matchList = [['g', 'h', 'i'], ['a', 'b', 'c']]
myList = []
first_list = ['i', 'am', 'an', 'old', 'man']
for i in matchList:
    for j in i:
        for word in first_list:
            if j in word:
                myList.append(j)
                for s in myList:
                    if s in i:
                        i.remove(s)
print(myList)
['i', 'a', 'a', 'a']
print(matchList)
[['g', 'h'], ['b', 'c']]

答案 3 :(得分:0)

您可以在迭代后尝试列表补偿。

matchList = [['g', 'h', 'i'], ['a', 'b', 'c']]
first_list = ['i', 'am', 'an', 'old', 'man']
myList = []

for i in matchList:
    for j in i:
        for word in first_list:
            if j in word:
                myList.append(j)

# Remove items from sublists
matchList = [[j for j in matchList[i] if j not in myList] for i in range(len(matchList))]

输出:

In [7]: myList
Out[7]: ['i', 'a', 'a', 'a']

In [8]: matchList
Out[8]: [['g', 'h'], ['b', 'c']]