“bool”类型的参数不可迭代

时间:2014-01-18 09:00:17

标签: python list iterator

我正在运行此代码,它应该在迭代时从列表中删除满足某个特定要求的元素:

linkList[:] = [link for link in linkList if "some string" in (self.visitedLinkDictionary[link] == 1) and (link.split('/')[2])]

在阅读this问题的答案后,我将代码更改为了。以前的版本是:

addNodes = 0
for link in linkList:
    self.visitedLinkDictionary[link] += 1
    #control that the link has not been checked previously
    if self.visitedLinkDictionary[link] == 1:
        #control that the link belongs to the caltech domain
        checkDomain = link.split('/')
        if "some string" in checkDomain[2]:
            addedNodes += 1
        else:
            print "Not in 'some string' domain"
            del linkList[i]
    else:
        print "Duplicated hyperlink"
        del linkList[i]
    i += 1

print addedNodes

我要做的是查看字符串列表并检查是否满足两个条件:

  • 首先,self.visitedLinkDictionary
  • 中不应包含给定的字符串
  • 其次它应该包含子字符串'some string'

任何人都能告诉我在任何/两种情况下我做错了什么以及最终实现此代码的更好方法吗?

1 个答案:

答案 0 :(得分:2)

比较self.visitedLinkDictionary[link] == 1的结果是布尔值(True或False)。然后你尝试使用生成TypeError的in来迭代它,因为布尔值不可迭代。

你想要的是:

linkList[:] = [link for link in linkList 
               if self.visitedLinkDictionary[link] == 1 and 
                  "some string" in link.split('/')[2]]