Python中为什么对元组元素进行判断会和想象的结果不一致?
db = pymysql.connect(host='192.168.89.41', user='root', passwd='root123', port=3306)
cur = db.cursor()
try:
cur.execute('show databases;')
data = cur.fetchall()
result1 = "('mysql',)" in data
result2 = "mysql" in data
result3 = "(\'mysql\'\,)" in data
result4 = "(\'mysql\',)" in data
print(data)
print(result1)
except:
print("操作 Mysql 失败")
print(data)的输出:
(('information_schema',), ('forum',), ('mysql',), ('mytest',), ('netdisk',), ('network',), ('save_sth',))
print(data[2])
('mysql',)
result1 到 4 的方式都是 False,我错在哪里?
Python中为什么对元组元素进行判断会和想象的结果不一致?
data 中的元素都是 tuple,没有一个字符串。
这个问题通常是因为对元组和比较运算符的机制理解有偏差。最常见的情况是使用 in 判断元素是否在元组中时,把元组的括号和元素结构搞混了。
举个例子,假设你写了这样的代码:
t = (1, 2, 3)
result = (1) in t # 你以为这是在判断1是否在元组t中
这里 (1) 实际上被解释为整数 1,而不是单元素元组。Python中单元素元组必须写成 (1,)。所以上面的代码等价于 1 in t,结果是 True。
但如果你真正想判断的是元组 (1,) 是否在 t 中,应该这样写:
t = (1, 2, 3)
result = (1,) in t # 判断元组(1,)是否是t的元素
这时候结果是 False,因为 t 的元素是数字 1, 2, 3,而不是元组 (1,)。
另一个常见问题是嵌套元组:
t = ((1, 2), (3, 4))
result = (1, 2) in t # 正确:True
result = 1 in t # 错误:False,因为1不在第一层元素中
总结:注意单元素元组的逗号语法和 in 运算符的查找层级。
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170118] on linux
>>> data = ((‘information_schema’,), (‘forum’,), (‘mysql’,))
>>> data
((‘information_schema’,), (‘forum’,), (‘mysql’,))
>>> result2 = (‘mysql’,) in data
>>> result2
True
>>>
result1 = “(‘mysql’,)” in data
我一直在想哪个弱类型语言可以这样判断,好像 PHP 也不行吧?
所言极是,我就不能用双引号来表达的内容。。。
,感谢感谢,已解决,小弟的 python 基础非常不扎实,为求出东西快,很多 python 的东西都是跳着摸索的,所以。。。。。。
python 可以啊。。。。笑,跑~~~~~ ^_^

