Python 字符串比较?

Python string comparisons?

我无法在 Python 中进行字符串比较,现在我已经看过这个,并尝试了很多次,多次撞到我的头,这很疯狂,我解释说:

我有一个函数 return 是一个名为:sites

的元组列表
('http://somewebsite.com', 'somewebsite')
('http://somewebsite2.com', 'somewebsite2')
('http://somewebsite3.com', 'somewebsite3')

现在知道网站的标题了,例如:somewebsite2 我使用 for 循环:

for url, name in sites:
    if name == title:
       screamandshout()

无论我如何尝试,我都无法匹配。

        log.log('title type= %s and value= %s' % (str(type(title)), title))
        log.log('name type= %s and value= %s' % (str(type(name)), name))
        log.log(str(str(name) == title))
        log.log(str(name == str(title)))
        log.log(str(str(name) == str(title)))
        log.log(str(name] is title))

我已经确定了类型和值,我已经尝试了反向比较,我绝对目瞪口呆,为此我失去了几个小时的生命。我有一些很简单的东西我不了解puython,因为我已经做了我能做的一切..

我想做的是将名称与标题和 return 网站相匹配。

这是一个可运行的示例,但它确实有效,这就是为什么我很困惑哈哈

sites = [
('http://somewebsite.com', 'somewebsite'),
('http://somewebsite2.com', 'somewebsite2'),
('http://somewebsite3.com', 'somewebsite3')
]
print str(type(sites))

title = 'somewebsite2'

for site in sites:
    print str(type(site))

for url, name in sites:
    if name == title:
       print 'MATCH!'

这会输出以下内容

<type 'list'>
 <type 'tuple'>
 <type 'tuple'>
 <type 'tuple'>
MATCH!

哦,我用的是python2.7

nametitle 的值必须不同。

尝试将它们打印出来 - 可能 title 包含一些尾随的白色 space(space、制表符、换行符等),您的日志语句不会显示这些内容。将您的日志语句更改为对变量值使用 %r 格式,如下所示:

log.log('title type= %s and value= %r' % (str(type(title)), title))
log.log('name type= %s and value= %r' % (str(type(name)), name))

这应该会使任何差异变得明显。

在相关说明中,您为什么要使用元组列表然后遍历它们?似乎字典会是更好的数据结构,因为它允许使用 name/title 作为键进行高效查找:

if title in sites:
    screamandshout()

如果无法将函数修改为return字典,需要对同一份数据进行多次查找,可以将其return值转化为字典:

sites = {name:url for url, name in f()}