在Python中比较字符串的7个简单示例
Python中有不同的比较运算符,可用于比较不同的对象类型。比较运算符(<<, <=
,>
,如果条件成立。对于集合对象,这些运算符比较元素的数量,如果每个集合对象在结构上均等,并且每个元素的值相同,则等效运算符== b
返回True。
相同类型对象的比较取决于Python中的类型:
数字被算术比较。
在字典上使用字符串的数字等效项(内置函数ord()的结果)对"字符串"进行比较。 Unicode和8位字符串在此行为中是完全可互操作的。
使用相应项的比较,按字典顺序对" Tuples"和列表进行比较。
通过字典排序(键,值)列表的字典比较来比较映射(" dictionaries")
除非它们是同一对象,否则大多数其他类型比较不相等。在一个程序的执行过程中可以任意但始终如一地选择是将一个对象视为小于还是大于一个对象。
基本字符串比较使用等于运算符
首先,我们将使用比较运算符来检查Python脚本中不同变量中的字符串是否相等。我创建了一个示例脚本,其中包含两个具有相同字符串字符集的变量
#!/usr/bin/env python3 var1 = 'abc' var2 = 'abc' # Check if both variables are equal print('var1 is Equal to var2:', var1 == var2) # Check if both variables are not equal print('var1 is Not Equal to var2:', var1 != var2)
该脚本的输出将是基于比较结果的布尔表达式
# python3 /tmp/comp_strings.py var1 is Equal to var2: True var1 is Not Equal to var2: False
与upper()或者lower()不区分大小写的比较
为了检查字符串是否相等并忽略大小写,我们可以使用" upper()"或者" lower()"函数来转换字符串值,然后执行比较。但这会期望字符串采用ASCII格式。 upper()
将整个字符串分别转换为大写字母,lower()
分别转换为小写字母。
在此示例中,我将字符串值转换为大写字母,然后对其进行比较。
#!/usr/bin/env python3 var1 = 'abc' var2 = 'ABC' # Check if both variables are equal using upper() print('var1 with upper(): ', var1.upper()) print('var2 with upper(): ', var2.upper()) print('var1 is Equal to var2:', var1.upper() == var2.upper())
该脚本的输出:
# python3 /tmp/comp_strings.py var1 with upper(): ABC var2 with upper(): ABC var1 is Equal to var2: True
不区分大小写与casefold()的比较
Casefolding与下部shell相似,但更具侵略性,因为它旨在消除字符串中的所有大小写区别。例如,德语小写字母"ß"等效于ss。由于它已经是小写字母,因此lower()
对ß
无效。 casefold()
将其转换为ss。
#!/usr/bin/env python3 var1 = 'abc' var2 = 'ABC' # Check if both variables are equal using casefold() print('var1 with casefold(): ', var1.casefold()) print('var2 with casefold(): ', var2.casefold()) print('var1 is Not Equal to var2:', var1.casefold() == var2.casefold())
该脚本的输出:
# python3 /tmp/comp_strings.py var1 is Equal to var2: True var1 with casefold(): abc var2 with casefold(): abc
使用sorted()进行字符串比较
要在执行比较之前对字符串进行排序,我们可以使用内置的sorted()函数,该函数从iterable中构建新的排序列表。
#!/usr/bin/env python3 var1 = 'abc def ghi' var2 = 'ghi abc def' # Sort the strings and remove whitespace sort_var1 = ''.join(sorted(var1)).strip() sort_var2 = ''.join(sorted(var2)).strip() # Check if both variables are equal print('var1 with sort_var1: ', sort_var1) print('var2 with sort_var2: ', sort_var2) print('var1 is Equal to var2:', sort_var1 == sort_var2)
使用collections.Counter()比较字符串
如果我们想知道两个字符串是否具有相同的字符集并且它们出现相同的次数,则可以使用collections.Counter()
类。计数器是用于计算可哈希对象的" dict"子类。它是一个无序集合,其中元素存储为字典键,其计数存储为字典值。计数可以是任何整数值,包括零或者负计数。
#!/usr/bin/env python3 from collections import Counter var1 = 'abc def ghi' var2 = 'ghi abc def' # Sort the strings and remove whitespace new_var1 = Counter(var1) new_var2 = Counter(var2) # Check if both variables are equal print('new_var1: ', new_var1) print('new_var2: ', new_var2) print('var1 is Equal to var2:', new_var1 == new_var2)
该脚本的输出:
# python3 /tmp/comp_strings.py new_var1: Counter({' ': 2, 'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1, 'f': 1, 'g': 1, 'h': 1, 'i': 1}) new_var2: Counter({' ': 2, 'g': 1, 'h': 1, 'i': 1, 'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1, 'f': 1}) var1 is Equal to var2: True
大于(>)或者小于(<)运算符
使用数字等效项按字典顺序比较Python中的字符串,这些等效项可以使用字符串的各个字符的内置函数ord()收集。运算符 <
,>
,==
,> =
, <=
和!=
比较两个对象的值。这些对象不必具有相同的类型。如果两者都是数字,则它们将转换为通用类型。否则,不同类型的对象总是比较不相等,并且被一致地,任意地排序。
获取单个字符的数值
#!/usr/bin/env python3 var1 = 'a' print('Numerical Value:', ord(var1))
该脚本的输出:
# python3 /tmp/comp_strings.py Numerical Value: 97
其中" a"的值是" 97",类似地,我们可以为其他字母收集这些值。同样,我们将比较较长的字符串
#!/usr/bin/env python3 var1 = 'abc' var2 = 'abd' # Get the ord(0 values for individual char in both variable ord_var1 = [ ord(x) for x in var1 ] print('var1:', ord_var1) ord_var2 = [ ord(x) for x in var2 ] print('var2:', ord_var2) # perform comparison print('var1 is greater than var2:', var1 > var2) print('var1 is lesser than var2:', var1 < var2) print('var1 is greater than or equal to var2:', var1 >= var2) print('var1 is lesser than or equal to var2:', var1 <= var2)
该脚本的输出:
# python3 /tmp/comp_strings.py var1: [97, 98, 99] var2: [97, 98, 100] var1 is greater than var2: False var1 is lesser than var2: True var1 is greater than or equal to var2: False var1 is lesser than or equal to var2: True