广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 如何比较字符串是否一样
  • 539
分享到

python 如何比较字符串是否一样

python字符串比较 2022-06-02 22:06:44 539人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

在python中,判断两个变量是否相等或一样,可以使用==或者is来判断;判断不一样可以使用 is not。 示例 使用注意事项 1.有时候两个字符串打印出来看着一样,但是判断却是False? 如果两个字符串末尾有

python中,判断两个变量是否相等或一样,可以使用==或者is来判断;判断不一样可以使用 is not。

示例

在这里插入图片描述

使用注意事项

1.有时候两个字符串打印出来看着一样,但是判断却是False?

如果两个字符串末尾有其他符号,比如回车‘\n',print的时候无法发现的,所以需要strip:


a=a.strip()
b=b.strip()
if a==b:
	print "True"

2.有时候==判断是 True ,is 判断却是 False?

这是因为两个字符串来自不同的内存块,内存地址不一样

id() 函数用于获取对象的内存地址。

(ob1 is ob2) 等价于 (id(ob1) == id(ob2)) id函数可以获得对象的内存地址,如果两个对象的内存地址是一样的,那么这两个对象肯定是一个对象。和is是等价的.

在这里插入图片描述

3.还有一种情况是两个对象用is判断是False,用id判断却是True。

原理比较复杂,如下:


In [1]: def bar(self, x):
...:     return self.x + y
...: 
In [2]: class Foo(object):
...:     x = 9
...:     def __init__(self ,x):
...:         self.x = x
...:     bar = bar
...:     
In [3]: foo = Foo(5)
In [4]: foo.bar is Foo.bar
Out[4]: False
In [5]: id(foo.bar) == id(Foo.bar)
Out[5]: True

真实情况是当执行.操作符的时候,实际是生成了一个proxy对象,foo.bar is Foo.bar的时候,两个对象顺序生成,放在栈里相比较,由于地址不同肯定是False,但是id(foo.bar) ==id(Foo.bar)的时候就不同了,首先生成foo.bar,然后计算foo.bar的地址,计算完之后foo.bar的地址之后,就没有任何对象指向foo.bar了,所以foo.bar对象就会被释放。然后生成Foo.bar对象,由于foo.bar和Foo.bar所占用的内存大小是一样的,所以又恰好重用了原先foo.bar的内存地址,所以id(foo.bar) == id(Foo.bar)的结果是True。

下面内容由邮件Leo Jay大牛提供,他解释的更加通透。

用id(expression a) == id(expression b)来判断两个表达式的结果是不是同一个对象的想法是有问题的。

foo.bar 这种形式叫 attribute reference [1],它是表达式的一种。foo是一个instance object,bar是一个方法,这个时候表达式foo.bar返回的结果叫method object [2]。

根据文档:

When an instance attribute is referenced that isn't a data attribute, its class is searched. If the name denotes a valid class attribute that is a function object, a method object is created by packing (pointers to) the instance object and the function object just found together in an abstract object: this is the method object.

foo.bar本身并不是简单的名字,而是表达式的计算结果,是一个 method object,在id(foo.bar)这样的表达式里,method object只是一个临时的中间变量而已,对临时的中间变量做id是没有意义的。

一个更明显的例子是,


print id(foo.bar) == id(foo.__init__)  输出的结果也是True

看 id 的文档[3]:

Return the “identity” of an object. This is an integer (or long integer) which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same id() value. CPython implementation detail: This is the address of the object in memory.

只有你能保证对象不会被销毁的前提下,你才能用 id 来比较两个对象。所以,如果你非要比的话,得这样写:


fb = foo.bar 
Fb = Foo.bar 
print id(fb) == id(Fb)

即把两个表达式的结果绑定到名字上,再来比是不是同一个对象,你才能得到正确的结果。

is表达式 [4] 也是一样的,你现在得到了正确的结果,完全是因为 CPython 现在的实现细节决定的。

现在的is的实现,是左右两边的对象都计算出来,然后再比较这两个对象的地址是否一样。

万一哪天改成了,先算左边,保存地址,把左边释放掉,再算右边,再比较的话,你的is的结果可能就错了。

官方文档里也提到了这个问题 [5]。

我认为正确的方法也是像id那样,先把左右两边都计算下来,并显式绑定到各自的名字上,然后再用is判断。

python字符串判断相等总结

判断字符串相等使用==,不使用is和cmp()函数

cmp() 函数则是相当于 <,==,> 但是在 python3 中,cmp() 函数被移除了,所以我以后还是避免少用这个函数。


#-*-conding:utf-8-*-
i='新闻';
m=input();
if i==m:
 print('yes');
else:
 print('no');  
input();

if second_company_name == u'中外运长航' or second_company_name == u'长航集团':
                print(u'忽略中外运长航和长航集团的子公司')
                continue

在 if 判断语句中非常有用呐!


#!/usr/bin/python
# Filename: if.py
  
number = 23
guess = int(raw_input('Enter an integer : '))
  
if guess == number:
 print 'Congratulations, you guessed it.' # New block starts here
 print "(but you do not win any prizes!)" # New block ends here
elif guess < number:
 print 'No, it is a little higher than that' # Another block
 # You can do whatever you want in a block ...
else:
 print 'No, it is a little lower than that'
 # you must have guess > number to reach here
  
print 'Done'
# This last statement is always executed, after the if statement is executed```
## strip 去掉字符串其他符号
str1 = str1.strip() #去掉字符串中其他符号包括换行符等等
str2 = str2.strip()
if str2 == str1:
    ... #自己的代码
## == 与 is的区别

python中,使用==来比较两个**对象的值**是否相等,而java 则使用== 比较两个**对象**是否是同一对象

譬如,java中比较字符串,一般使用equal 方法,来比较两个对象的值是否相等,而不使用==

相比较的,python 使用**is** 来比较两个对象是否是同一对象。

is 用来判断是否是同一个对象,is 是种很特殊的语法,你在其它的语言应该不会见到这样的用法。

官方文档解释:


```python
The operators ``is`` and ``is not`` test for object identity: ``x is
y`` is true if and only if *x* and *y* are the same object. ``x is
not y`` yields the inverse truth value.
  
cmp(...)
 cmp(x, y) -> integer
  
 Return negative if x<y, zero if x==y, positive if x>y.

注意:内容相同的字符串实际上是同一个对象


>>> a='abc'
>>> b='abc'
>>> a is b
True
>>> id(a) == id(b)
True
>>>
>```
(Java 中直接赋值的字符串也可用 == 来判断,但是使用 new 实例化的对象则需要使用equals(String s) 来判断)
## 判断数字相等不要用 is 操作符
```python
>>> a = 256
>>> b = 256
>>> id(a)
9987148
>>> id(b)
9987148
>>> a = 257
>>> b = 257
>>> id(a)
11662816
>>> id(b)
11662828

为什么两次 is 返回的是不同结果?不是应该都是 true 吗?

因为 string pooling (或叫intern)。 is 相等代表两个对象的 id 相同(从底层来看的话,可以看作引用同一块内存区域)。 至于为什么 “ABC” 被 intern 了而 “a bc” 没有,这是 Python 解析器实现决定的,可能会变。

== 用来判断两个对象的值是否相等(跟 Java 不同,Java 中 == 用来判断是否是同一个对象)。

今天我用 == 来判断两个 IP 地址 字符串是否相同。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: python 如何比较字符串是否一样

本文链接: https://www.lsjlt.com/news/10849.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 如何比较字符串是否一样
    在python中,判断两个变量是否相等或一样,可以使用==或者is来判断;判断不一样可以使用 is not。 示例 使用注意事项 1.有时候两个字符串打印出来看着一样,但是判断却是False? 如果两个字符串末尾有...
    99+
    2022-06-02
    python 字符串比较
  • 使用python怎么比较字符串是否一样
    今天就跟大家聊聊有关使用python怎么比较字符串是否一样,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。示例使用注意事项1.有时候两个字符串打印出来看着一样,但是判断却是False?...
    99+
    2023-06-15
  • Python字符串比较:如何判断两个字符串是否相等?
    Python字符串比较:如何判断两个字符串是否相等? 在Python编程中,字符串是最常用的数据类型之一。当我们需要比较两个字符串时,通常需要判断它们是否相等。这篇文章将详细介绍Python中比较两个字符串的方法。 使用“==”运算符比较...
    99+
    2023-08-22
    python 开发语言 java Python
  • javascript如何比较字符串是否相等
    这篇文章主要介绍javascript如何比较字符串是否相等,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! javascript比较字符串是否相等的方法:1...
    99+
    2022-10-19
  • java比较字符串是否相等
    java中字符串的比较:==我们经常习惯性的写上if(str1==str2),这种写法在java中可能会带来问题 example1: (推荐学习:java课程)String a="abc"; String b="abc"...
    99+
    2020-01-05
    java入门 java
  • java中如何比较字符串是否相等
    1、java中字符串的比较:==我们经常习惯性的写上if(str1==str2),这种写法在java中可能会带来问题 example1:String a="abc";String b="abc"那么a==b将返回true。因为在java中字...
    99+
    2019-03-24
    java 比较 字符串 相等
  • jquery中如何比较字符串是否相等
    这篇“jquery中如何比较字符串是否相等”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“jquery中如何比较字符串是否相等...
    99+
    2023-07-06
  • shell字符串比较判断是否为数字
    二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. 整数比较 -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if [ "$a" -ne "$b" ] -gt 大...
    99+
    2022-06-04
    字符串 判断是否 数字
  • jquery中怎么比较字符串是否相等
    在 jQuery 中比较字符串是否相等有多种方式,以下是其中几种常用的方法:使用 JavaScript 自带的比较操作符 "===" 或 "=="。var str1 = "hello&quo...
    99+
    2023-05-14
  • php如何比较字符串
    这篇文章将为大家详细讲解有关php如何比较字符串,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP不区分大小写比较字符串的方法:1、使用“strcasecmp(字符串1,字符串2)”语句;2、使用“st...
    99+
    2023-06-15
  • shell字符串怎么比较判断是否为数字
    本篇内容介绍了“shell字符串怎么比较判断是否为数字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!二元比较操作符,比较变量或者比较数字.注...
    99+
    2023-06-09
  • 如何使用shell比较两个字符串是否相等
    这篇文章给大家分享的是有关如何使用shell比较两个字符串是否相等的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。比较两个字符串是否相等的办法是: if [ "$test"x = "t...
    99+
    2023-06-09
  • 字符串如何比较大小
    字符串比较大小的步骤:1、将要比较的两个字符串分别赋给两个变量;2、比较两个字符串的长度,较短的字符串将被认为是较小的字符串;3、如果长度相同,逐个比较它们的字符;4、从字符串的第一个字符开始,比较两个字符串的ASCII值;5、如果ASCI...
    99+
    2023-08-18
  • 比较两个字符串是否相等的shell代码
    比较两个字符串是否相等的办法是: if [ "$test"x = "test"x ]; then 这里的关键有几点: 1 使用单个等号 2 注意到等号两边各有一个空格:这是unix shell的要求 3 注...
    99+
    2022-06-04
    字符串 两个 代码
  • Go如何实现字符串比较
    这篇“Go如何实现字符串比较”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“Go如何实现字符串比较”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入主题吧。##...
    99+
    2023-06-29
  • go语言如何比较字符串
    这篇文章主要介绍“go语言如何比较字符串”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言如何比较字符串”文章能帮助大家解决问题。比较方法:1、直接使用“==”运算符比较,语法“str1 == ...
    99+
    2023-07-05
  • PHP中如何去比较字符串
    这篇文章主要讲解了“PHP中如何去比较字符串”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中如何去比较字符串”吧!在PHP中存在着两个函数用来比较字符串,它们是strcmp() 和 s...
    99+
    2023-06-25
  • c语言怎么比较两个字符串是否相等
    在C语言中,可以使用strcmp函数来比较两个字符串是否相等。strcmp函数的原型为:int strcmp(const char ...
    99+
    2023-10-10
    c语言
  • php如何对比字符串是否不同
    这篇文章主要介绍“php如何对比字符串是否不同”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php如何对比字符串是否不同”文章能帮助大家解决问题。三种对比方法:1、使用比较运算符(==、===、&g...
    99+
    2023-07-02
  • Python中判断字符串是否包含另一个字符串
    Python中判断字符串是否包含另一个字符串 在Python编程中,经常需要判断一个字符串是否包含另一个字符串。这在处理文本数据或搜索操作时非常常见。Python提供了几种方法来实现这个功能,本文将介...
    99+
    2023-10-18
    python mysql 数据库 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作