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

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.

相关推荐
热点推荐
太离谱了!一句“郑钦文甚至有点丑”掀起轩然大波,网友:挺漂亮的,并且是国际化的漂亮,但是人家可不是演员,不是靠脸吃饭

太离谱了!一句“郑钦文甚至有点丑”掀起轩然大波,网友:挺漂亮的,并且是国际化的漂亮,但是人家可不是演员,不是靠脸吃饭

火山詩话
2026-10-13 08:18:00
中日对峙已紧张到了极点,动手绝不是吓唬人

中日对峙已紧张到了极点,动手绝不是吓唬人

扶苏聊历史
2026-10-14 11:42:38
5‑1!2‑0亚冠疯狂夜!积分榜变天:日本包揽前三,海港跌出前四

5‑1!2‑0亚冠疯狂夜!积分榜变天:日本包揽前三,海港跌出前四

精彩不容错过
2026-10-15 01:49:49
江西宜春一“老头乐”多次撞击警车,警方通报:驾驶员刘某某(男,54岁)  被当场控制,肇事逃逸撞倒电动车,并与执勤警车发生碰撞

江西宜春一“老头乐”多次撞击警车,警方通报:驾驶员刘某某(男,54岁) 被当场控制,肇事逃逸撞倒电动车,并与执勤警车发生碰撞

扬子晚报
2026-10-14 07:28:14
真正压死马家军骑兵的,是从东北火速运来的四野重炮

真正压死马家军骑兵的,是从东北火速运来的四野重炮

孤酒老巷QA
2026-10-14 05:56:59
欧冠综述:大巴黎4-2曼城!皇马4-3逆转罗马,利物浦6-3,维拉6-0

欧冠综述:大巴黎4-2曼城!皇马4-3逆转罗马,利物浦6-3,维拉6-0

我爱英超
2026-10-15 05:01:48
网坛最高奖金赛事延期!周边局势紧张,沙特六王大满贯推迟举办

网坛最高奖金赛事延期!周边局势紧张,沙特六王大满贯推迟举办

全景体育V
2026-10-15 07:46:57
刹车踏板断裂背后的话术三刀

刹车踏板断裂背后的话术三刀

西楼饮月
2026-10-14 17:00:14
早上7点!NBA揭幕战变“东决预演”,詹姆斯PK布伦森,四巨头力争首胜

早上7点!NBA揭幕战变“东决预演”,詹姆斯PK布伦森,四巨头力争首胜

大卫的篮球故事
2026-10-14 19:55:22
“谷歌陈立人杀妻案”新进展:他想和前女友复合遭拒绝,不久后将妻子杀死

“谷歌陈立人杀妻案”新进展:他想和前女友复合遭拒绝,不久后将妻子杀死

江山挥笔
2026-10-13 23:10:02
1.5亿房奴或彻夜难眠,2026楼市坏消息传来,接下来的日子可能难了

1.5亿房奴或彻夜难眠,2026楼市坏消息传来,接下来的日子可能难了

巢客HOME
2026-10-15 05:45:03
两起医疗投诉,看完刷新三观!

两起医疗投诉,看完刷新三观!

医脉圈
2026-10-15 12:25:52
职业生涯下一步去哪?谢晋:踢完国际中体联世界杯比赛再说

职业生涯下一步去哪?谢晋:踢完国际中体联世界杯比赛再说

懂球帝
2026-10-15 00:37:07
订婚现场超吸睛!新娘美得像天仙般惊艳众人,新郎一现身却让全场愣住,这差距到底在哪呢

订婚现场超吸睛!新娘美得像天仙般惊艳众人,新郎一现身却让全场愣住,这差距到底在哪呢

世界圈
2026-10-14 15:27:12
裁判鸣哨,佐藤瞳松口气,以为自己赢了,万万没想到,被王曼昱三球打回原形,套路赢不过硬实力

裁判鸣哨,佐藤瞳松口气,以为自己赢了,万万没想到,被王曼昱三球打回原形,套路赢不过硬实力

安之若素p
2026-10-15 12:00:24
中朝新鸭绿江大桥开通仪式举行

中朝新鸭绿江大桥开通仪式举行

环球网资讯
2026-10-15 10:08:06
邵奇惠同志逝世,中央有关领导同志以不同方式表示哀悼

邵奇惠同志逝世,中央有关领导同志以不同方式表示哀悼

政知新媒体
2026-10-14 16:32:01
近2万亿,流出!

近2万亿,流出!

成方街哨兵
2026-10-14 23:12:30
陶哲轩捅破AI窗户纸:千亿模型就靠两样老数学,高中底子够用

陶哲轩捅破AI窗户纸:千亿模型就靠两样老数学,高中底子够用

呼呼历史论
2026-10-14 13:04:09
1935年徐向前拒绝跟随毛主席北上,晚年反思:成了他一生遗憾!

1935年徐向前拒绝跟随毛主席北上,晚年反思:成了他一生遗憾!

大运河时空
2026-10-14 20:00:05
2026-10-15 14:12:49
MediaTea
MediaTea
专业的数字媒体、新媒体技术
2233文章数 85关注度
往期回顾 全部

科技要闻

核弹院士彭先觉:可控核聚变 不必再等50年

头条要闻

牛弹琴:中东杀红了眼令人心惊 新加坡也倒大霉了

头条要闻

牛弹琴:中东杀红了眼令人心惊 新加坡也倒大霉了

体育要闻

五大联赛第二射手,开着11年前的二手车

娱乐要闻

陈小春弟弟被卖,多年不打扰另有隐情

财经要闻

洋餐饮的中国生意:红利消退后的集体交权

汽车要闻

不止大空间/纯电增程任选 小鹏MONA L05来了

态度原创

家居
房产
游戏
亲子
军事航空

家居要闻

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

房产要闻

突发!三亚超级万象城改规公示下架!

《火焰纹章:万缕千丝》突然更新!首弹DLC今日上线

亲子要闻

没有女儿吧想要一个,没想到来了一双

军事要闻

朝鲜潜射两种导弹

无障碍浏览 进入关怀版