问题的提出和解决方案概述
在这篇文章中,你将学习在Python中处理字符串时如何忽略(大/小/标题)大小写字符。
忽略字符串的大小写的主要原因是为了进行准确的字符串比较或返回准确的搜索结果。
例如,下面的三(3)个字符串并不完全相同。如果相互比较,它们会返回False。
when life gives you lemons, make lemonade. |
这是因为ASCII表中的每个字符为键盘上的每个键或组合键分配了不同的数字值。
本文概述了忽略字符串的情况的各种方法。
问题:我们如何编写代码来比较字符串?
我们可以通过以下方法之一来完成这项任务。
- 方法1:使用一个
lower()和alambda - 方法2:使用
upper()和List Comprehension - 方法3:使用
title() - 方法4:使用
casefold() - 方法5:使用
lower()和字典的理解 - 奖励:将全名的CSV转换成标题大小写
方法1:使用 lower() 和 lambda
这种方法使用 lower()和一个 lambda来将一个 List的字符串转换为小写字母来搜索一个雇员。
staff = ['Andy', 'MAci', 'SteVe', 'DarCY', 'Harvey']
staff_lower = list((map(lambda x: x.lower(), staff)))
print(staff_lower)
上面声明了一个 Listof Rivers Clothing Employees。如果我们使用这个列表搜索一个雇员,如Darcy ,没有结果,因为Darcy 和DarCY 不相同。让我们来解决这个问题。
信息:A l[a](https://blog.finxter.com/a-simple-introduction-of-the-lambda-function-in-python/)mbda函数是一个单行代码,在本例中,它将staff 中的每个List元素转换为小写。然后,转换为一个 map()对象,然后再返回到 List。输出保存到staff_lower ,并输出到终端。
['andy', 'maci', 'steve', 'darcy', 'harvey'] |
如果现在进行比较,会发现正确的Employee。
if ('Darcy'.lower() == staff_lower[3]):
print('Match Found!')
| Match Found! |
方法2:使用upper()和List Comprehension
这个方法使用 upper()和一个list comprehension将一个Listof Strings转换为大写字母并搜索一个Employee。
brands = ['ChaNnel', 'CLINique', 'DIOR', 'Lancome', 'MurAD']
brands_upper = [x.upper() for x in brands]
print(brands_upper)
上面声明了一个世界上前五(5)个美容品牌的列表。如果我们使用这个列表搜索一个公司,如Channel ,没有结果,因为 `Channel`和ChaNnel 是不一样的。让我们来解决这个问题。
调用一个 List Comprehension,将brands 中的每个元素转换为大写。结果被保存到brands_upper ,并输出到终端。
['CHANEL', 'CLINIQUE', 'DIOR', 'LANCOME', 'MURAD'] |
如果现在进行比较,会发现正确的品牌。
my_fav = 'Murad'
if (my_fav.upper() == brands_upper[4]):
print(f'{my_fav} Found!')
| Murad Found! |
方法3:使用title()
这个方法使用 title()将一个字符串中的每个字都转换为大写。这个方法的最佳用途是将全名转换为大写字母。这可以确保名字、中间名和姓氏都符合预期。
full_name = 'jessica a. barker'.title()
print(full_name)
上面接受了一个字符串,将 title()方法,将其保存到full_name ,并输出到终端。
Jessica A. Barker
方法4:使用casefold()和一个字典
这个方法使用 casefold()将一个字符串转换为小写字母。这个方法的作用不止是 lower():它使用Unicode大小写折叠规则。
phrase = 'Nichts ist unmöglich für den Unwilligen!'
cfold = phrase.casefold()
print(cfold)
上面创建了一个德语的引号,并将其保存到phrase 。这确保了所有的字符都被正确地转换为小写,从而进行无大小写的匹配。
nichts ist unmöglich für den unwilligen! |
这说明了什么?
方法5:使用lower()和字典理解
这个方法使用Use lower()来将字典中的值转换成小写字母,使用字典理解法。
employees = {'Sandy': 'Coder', 'Kevin': 'Network Specialist', 'Amy': 'Designer'}
result = {k: v.lower() for k, v in employees.items()}
print(result)
以上创建了一个包含Rivers雇员姓名和相关工作职位的字典。这将保存到employees 。
接下来,字典理解被用来循环浏览key:value 字典中的值,并将这些值转换为小写。输出结果保存到result ,并输出到终端。
{'Sandy': 'coder', 'Kevin': 'network specialist', 'Amy': 'designer'} |
奖励:CSV列到title()的大小写
在这个奖金部分,你正在处理的一个CSV文件包含一列全名。你要确保在这一列中输入的所有数据都是大小写。 title()大小写。这可以通过运行以下代码来实现。
finxter_users.csv 文件的内容
| FID | 全称:Full_Name |
| 30022145 | 萨利-詹金斯 |
| 30022192 | Joyce Hamilton |
| 30022331 | Allan Thompson |
| 30022345 | Harry Stiller |
| 30022157 | 本-霍金斯 |
import pandas as pd
users = pd.read_csv('finxter_users.csv')
users['Full_Name'] = users['Full_Name'].str.title()
print(users)
接下来,finxter_users.csv 文件(内容如上所示)被读取并保存到DataFrameusers 。
突出显示的一行直接访问users['Full_Name'] 列中的所有数值,并将每个条目转换为 title()大小写。这将保存到users['Full_Name'] ,并输出到终端。
| FID | 全称:Full_Name | |
| 0 | 30022145 | 萨利-詹金斯 |
| 1 | 30022192 | 乔伊斯-汉密尔顿 |
| 2 | 30022331 | 阿兰-汤普森 |
| 3 | 30022345 | Harry Stiller |
| 4 | 30022157 | 本-霍金斯 |
注意:不要忘记保存数据框架以保持变化。
总结
这(6)种忽略字符串中的情况的方法应该给你足够的信息来选择最适合你编码要求的方法。