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

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.

相关推荐
热点推荐
外媒:英国宣布英战机将加入北约在波兰行动

外媒:英国宣布英战机将加入北约在波兰行动

参考消息
2025-09-16 20:58:04
我退休金5300花900买条荷花,遭儿媳痛骂,我果断搬回自己养老房

我退休金5300花900买条荷花,遭儿媳痛骂,我果断搬回自己养老房

磊子讲史
2025-09-09 12:01:58
中国代表在联合国人权理事会强烈谴责以色列袭击卡塔尔

中国代表在联合国人权理事会强烈谴责以色列袭击卡塔尔

新华社
2025-09-17 06:32:04
单局21-9欺负小孩!李诗沣2-0横扫世界第19,后者赛季双杀翁泓阳

单局21-9欺负小孩!李诗沣2-0横扫世界第19,后者赛季双杀翁泓阳

钉钉陌上花开
2025-09-17 11:25:39
西贝道歉了,太二“有点凉”

西贝道歉了,太二“有点凉”

野马财经
2025-09-15 15:19:50
老公说婚后钱各管各的,我点头同意,他妈住院要钱时,全家都看着我

老公说婚后钱各管各的,我点头同意,他妈住院要钱时,全家都看着我

泽泽先生
2025-07-14 16:36:45
重新签约加盟!你好,考辛斯!再见了,CBA......

重新签约加盟!你好,考辛斯!再见了,CBA......

篮球实战宝典
2025-09-16 19:47:31
开始试点!拆掉地铁座位提升高峰运力,牛马到底是牛马还是人?

开始试点!拆掉地铁座位提升高峰运力,牛马到底是牛马还是人?

说宇宙
2025-09-17 08:46:58
知名博主调侃于朦胧!还以为有什么内幕,结果是喝多了把自己玩死

知名博主调侃于朦胧!还以为有什么内幕,结果是喝多了把自己玩死

小徐讲八卦
2025-09-17 09:33:43
43岁凯特王妃现身公爵夫人葬礼,跟查尔斯互动很温馨,卡米拉缺席

43岁凯特王妃现身公爵夫人葬礼,跟查尔斯互动很温馨,卡米拉缺席

译言
2025-09-17 06:53:34
梅西助攻+铲射破门!率队3-1大胜,差榜首8分,常规赛可争冠

梅西助攻+铲射破门!率队3-1大胜,差榜首8分,常规赛可争冠

体育知多少
2025-09-17 09:36:59
牛马打工人发牢骚的搞笑文案

牛马打工人发牢骚的搞笑文案

微法官
2025-09-16 00:05:42
风情万种,阿姨

风情万种,阿姨

可乐谈情感
2025-09-17 10:30:36
魏建军:电动车如果叫新能源车,那空调也是新能源空调……

魏建军:电动车如果叫新能源车,那空调也是新能源空调……

柴狗夫斯基
2025-09-16 10:24:37
曝苹果因iPhone 17标准版爆单调整产线 20万工人赶工

曝苹果因iPhone 17标准版爆单调整产线 20万工人赶工

手机中国
2025-09-16 17:24:04
大老师这是37?你说17我都信!

大老师这是37?你说17我都信!

贵圈真乱
2025-09-16 10:51:13
118变122!杨瀚森,牛掰!中国男篮未来第一核心

118变122!杨瀚森,牛掰!中国男篮未来第一核心

篮球实战宝典
2025-09-17 00:30:14
深圳一地铁口“摩的”扎堆揽客,网友吐槽:家都进不去!

深圳一地铁口“摩的”扎堆揽客,网友吐槽:家都进不去!

极目新闻
2025-09-16 20:09:53
活在小县城的悲哀

活在小县城的悲哀

起喜电影
2025-09-11 11:04:13
中国新闻周刊炮轰杨景媛论文!武汉大学的沉默,比任何声音都刺耳

中国新闻周刊炮轰杨景媛论文!武汉大学的沉默,比任何声音都刺耳

热点菌本君
2025-09-13 14:48:29
2025-09-17 12:52:49
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1523文章数 62关注度
往期回顾 全部

科技要闻

英伟达RTX6000D遇冷,中国大厂不买账

头条要闻

雷军公开小米17Pro最新设计:全新背屏设计可控制汽车

头条要闻

雷军公开小米17Pro最新设计:全新背屏设计可控制汽车

体育要闻

什么小火龙?申京已经是MVP水平!

娱乐要闻

官媒发文证实,李乃文再破天花板

财经要闻

曝匹克大幅降薪 员工还要进行"三观培训"

汽车要闻

唐DM-i智驾版175KM长续航版上市售价17.98万起

态度原创

家居
游戏
数码
公开课
军事航空

家居要闻

功能兼备 温暖白色城堡

什么?造人的工厂你都没开过?

数码要闻

小米推出米家户外多功能灯:IP66级防水防尘,众筹价 89元

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

歼-20战机首次进行静态展示

无障碍浏览 进入关怀版