python - 'bool' 类型的参数不可迭代

标签 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”

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

最佳答案

比较结果 self.visitedLinkDictionary[link] == 1 是一个 bool 值(True 或 False)。然后您尝试使用 in 对其进行迭代,这会生成 TypeError,因为 bool 值不可迭代。

你想要的是:

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

关于python - 'bool' 类型的参数不可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21202093/

相关文章:

c++ - STL迭代器包装器

python - Wandisco:通过 REST 创建新的复制规则

python - 在字符串列表中的空格中插入字符

python - 比较文件和列表以查看它们是否相同

java - 如何在没有集合的情况下洗牌 ArrayList

C++ 记住指向已分配字符串的指针

c++ - 自定义对象容器的迭代器

python - 不能减去偏移天真和偏移感知日期时间

python - 使用 mailgun (python) 发送带有附件的电子邮件时出错

c++ - 如何防止迭代器超出范围?