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
name
和 title
的值必须不同。
尝试将它们打印出来 - 可能 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()}
我无法在 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
name
和 title
的值必须不同。
尝试将它们打印出来 - 可能 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()}