网易首页 > 网易号 > 正文 申请入驻

Python:字符串的进阶技巧

0
分享至

字符串的基础操作包括索引、切片、拼接等,而在更复杂的场景中,我们往往需要借助一些进阶技巧来实现高效的数据处理与文本分析。

一、字符串与其它容器结构互操作

字符串和列表、集合、字典之间常常需要互相转换。

1、字符串转

s = "hello"
lst = list(s)
print(lst)  # ['h', 'e', 'l', 'l', 'o']

2、转字符串

words = ["Python", "3.12"]
s = " ".join(words)
print(s)  # Python 3.12

3、字符串转(自动去重)

s = "banana"
print(set(s))  # {'b', 'a', 'n'}

4、键值对字符串转

pairs = ["a=1", "b=2", "c=3"]
d = dict(p.split("=") for p in pairs)
print(d)  # {'a': '1', 'b': '2', 'c': '3'}

这种互操作常见于数据清洗和配置解析。

二、利用生成器表达式

是一种惰性迭代方式,比列表推导更省内存,适合与 join() 等操作搭配。

1、过滤字符

s = "hello123world"
letters = "".join(ch for ch in s if ch.isalpha())
print(letters)  # helloworld

2、转换字符

s = "abc"
upper_s = "".join(ch.upper() for ch in s)
print(upper_s)  # ABC

3、编码映射

s = "Python"
shift = "".join(chr(ord(c) + 1) for c in s)  # 字母偏移
print(shift)  # Qzuipo

在处理大规模文本时,生成器表达式更高效。

三、字符映射与批量替换

当需要大规模替换多个字符时,str.maketrans() 与 translate() 是最佳选择。

# 构造映射表:将 - 去掉,将 _ 替换为空格
table = str.maketrans({"-": "", "_": " "})

s = "data-set_v1"
print(s.translate(table))  # dataset v1

相比多次调用 replace(),这种方式更高效。

四、字符串排序与唯一化

有时需要对字符串内容进行排序或去重。

1、字符排序

s = "banana"
print("".join(sorted(s)))  # aaabnn

2、去重并保序

s = "banana"
unique = "".join(dict.fromkeys(s))
print(unique)  # ban

这种方法常用于文本分析、关键词去重等场景。

五、格式化的高级技巧

除了基础的 format() 方法,还可使用 进行对齐与数字进制转换。

1、对齐与填充

print(f"{'hi':<5}")   # hi   左对齐
print(f"{'hi':>5}")   # hi 右对齐
print(f"{'hi':^5}")   # hi   居中

2、数字进制

num = 255
print(f"{num:b}")   # 11111111 二进制
print(f"{num:o}")   # 377       八进制
print(f"{num:x}")   # ff        十六进制

这在日志输出、表格打印时非常实用。

六、正则表达式处理文本

模块提供了强大的字符串处理功能,适合复杂匹配与替换。

import re
s = "apple, banana; cherry"

# 按多种分隔符切分
words = re.split(r"[,;]\s*", s)
print(words)  # ['apple', 'banana', 'cherry']

# 替换所有数字为 #
s = "user123id456"
print(re.sub(r"\d", "#", s))  # user###id###

是文本清洗与模式匹配的必备工具。

七、多语言与大小写比较

大小写比较时,casefold() 比 lower() 更彻底,适合国际化场景。

print("Straße".lower())     # straße
print("Straße".casefold())  # strasse

print("straße" == "Strasse".casefold())  # True

这对多语言搜索和规范化文本尤为重要。

八、性能优化技巧

1、避免频繁拼接

# ❌ 效率低
s = ""
for i in range(10000):
    s += str(i)

s = "".join(str(i) for i in range(10000))

2、用 io.StringIO 构建大字符串

from io import StringIO

buffer = StringIO()
for i in range(5):
    buffer.write(str(i))
print(buffer.getvalue())  # 01234

建议:小规模拼接可直接用 +,大规模拼接优先 join() 或 StringIO。

小结

数据互操作:字符串与列表/集合/字典相互转换,便于数据清洗

生成器表达式:惰性计算,节省内存,适合与 join() 搭配

字符映射:maketrans() + translate() 高效批量替换

排序与去重:sorted() 排序,dict.fromkeys() 保序去重

格式化:f-string 可实现对齐、填充、进制转换

正则表达式:re 模块支持复杂匹配与替换

国际化:casefold() 适合多语言大小写比较

性能优化:避免 += 拼接,推荐 join() 或 StringIO

点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
活久见!深圳一公司调整公积金缴存比例和基数,缴存比例由5%下调至1%,缴存基数由2520元/月调整为员工上一年度月平均工资

活久见!深圳一公司调整公积金缴存比例和基数,缴存比例由5%下调至1%,缴存基数由2520元/月调整为员工上一年度月平均工资

火山詩话
2026-08-16 15:12:07
瞒不住了?李小冉5亿宠婚骗局曝光,11年丁克崩盘,郭京飞一针见血

瞒不住了?李小冉5亿宠婚骗局曝光,11年丁克崩盘,郭京飞一针见血

荒野老五
2026-08-15 22:46:34
有一种痛苦叫买了“大平层”,不好住不好卖,已经彻底沦为不动产

有一种痛苦叫买了“大平层”,不好住不好卖,已经彻底沦为不动产

室内设计师有料儿
2026-08-15 17:47:05
特斯拉中国新车亮相,这价格真棒啊!

特斯拉中国新车亮相,这价格真棒啊!

XCiOS俱乐部
2026-08-16 14:11:30
终于知道为啥中国人没有蓄须的习惯了!评论区剖析一针见血,太精辟

终于知道为啥中国人没有蓄须的习惯了!评论区剖析一针见血,太精辟

夜深爱杂谈
2026-08-15 21:16:22
上海名媛“拼多多版”!3000一晚的房间,凑齐15个人分摊,每人只出200,酒店浴袍轮流共用

上海名媛“拼多多版”!3000一晚的房间,凑齐15个人分摊,每人只出200,酒店浴袍轮流共用

火山詩话
2026-08-16 05:40:16
青岛大学“旭日旗校徽”真相大白:35岁男子被拘留!

青岛大学“旭日旗校徽”真相大白:35岁男子被拘留!

听心堂
2026-08-16 09:28:43
蒯曼0比4出局不冤!她赛后说出“让人揪心的真因”,速度也救不了

蒯曼0比4出局不冤!她赛后说出“让人揪心的真因”,速度也救不了

林子说事
2026-08-17 04:52:16
蒙古国爆发的动乱,大概率只是蒙古国崩溃的开始。

蒙古国爆发的动乱,大概率只是蒙古国崩溃的开始。

小马姨
2026-08-03 12:07:39
重磅!巴萨签下30岁金球先生 年薪1500万 曼城已接受7650万欧报价

重磅!巴萨签下30岁金球先生 年薪1500万 曼城已接受7650万欧报价

我爱英超
2026-08-17 03:08:47
天价发布会难掩产品平庸,消费者用脚投票,车企清醒了?

天价发布会难掩产品平庸,消费者用脚投票,车企清醒了?

车毂轆
2026-08-16 16:31:22
乌克兰“火烈鸟”导弹出击!摧毁俄罗斯萨马拉航天中心

乌克兰“火烈鸟”导弹出击!摧毁俄罗斯萨马拉航天中心

项鹏飞
2026-08-15 21:14:10
快讯!日本终于急眼了!

快讯!日本终于急眼了!

故事终将光明磊落
2026-08-17 08:23:33
和平!李在明提议结束朝鲜战争

和平!李在明提议结束朝鲜战争

IN朝鲜
2026-08-16 12:24:10
詹姆斯为何离开湖人?隆多的话一针见血,76人最可怕的或许是布朗

詹姆斯为何离开湖人?隆多的话一针见血,76人最可怕的或许是布朗

小路看球
2026-08-16 15:50:51
24GB+1TB!新机官宣:骁龙8 Elite Gen10 Pro+15000mAh!

24GB+1TB!新机官宣:骁龙8 Elite Gen10 Pro+15000mAh!

科技堡垒
2026-08-16 12:05:13
胖东来又啪啪打样了!师傅免费为用户清洗空调外机,旧空调恢复正常制冷,主动退掉新购空调,评论区炸锅

胖东来又啪啪打样了!师傅免费为用户清洗空调外机,旧空调恢复正常制冷,主动退掉新购空调,评论区炸锅

火山詩话
2026-08-15 07:24:39
立案仅48小时!德云社乱成一锅粥,原来岳云鹏才是真正的聪明人

立案仅48小时!德云社乱成一锅粥,原来岳云鹏才是真正的聪明人

晓徙娱乐
2026-08-16 22:26:57
恨不得手里有针!高价买演唱会票,却被前排充气增高坐垫挡死,观演矛盾频发,多地演唱会明确将其列为禁带品

恨不得手里有针!高价买演唱会票,却被前排充气增高坐垫挡死,观演矛盾频发,多地演唱会明确将其列为禁带品

新快报新闻
2026-08-16 00:17:21
泽连斯基亲口确认,FP-9 深秋前就绪,855km 射程覆盖莫斯科!

泽连斯基亲口确认,FP-9 深秋前就绪,855km 射程覆盖莫斯科!

可达鸭面面观
2026-08-12 15:05:00
2026-08-17 10:24:49
MediaTea
MediaTea
专业的数字媒体、新媒体技术
2064文章数 86关注度
往期回顾 全部

科技要闻

马斯克600亿美元买条近路

头条要闻

男子把特斯拉送4S店维修 1小时后收到路试撞报废消息

头条要闻

男子把特斯拉送4S店维修 1小时后收到路试撞报废消息

体育要闻

因莫比莱:普通人的平凡故事

娱乐要闻

辟谣恋情都按谷爱凌这个标准来!

财经要闻

电商“AB货”,乱象背后是行业内卷

汽车要闻

杨洋成001号车主 岚图追光S正式上市

态度原创

教育
家居
亲子
旅游
军事航空

教育要闻

毕业一年还没找到工作?这所英国大学承诺给你带薪实习

家居要闻

2026建博会(广州) 公装联探展交流活动

亲子要闻

反应力挑战

旅游要闻

陕西朱雀森林公园雨后云海似仙境

军事要闻

伊朗:对每名入境美国军人悬赏50亿土曼

无障碍浏览 进入关怀版