为什么我的代码不起作用?我无法弄清楚
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']
答案 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:您在帖子中使用了matchList
和match_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']]