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

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-01-22 00:48:44
向华强曝李亚鹏曾在香港办派对为嫣然天使基金筹款:自己捐了几百万,王菲、刘嘉玲等众星捧场

向华强曝李亚鹏曾在香港办派对为嫣然天使基金筹款:自己捐了几百万,王菲、刘嘉玲等众星捧场

扬子晚报
2026-01-22 21:34:18
特朗普的达沃斯“暴论”看似疯魔,实则藏着清晰的战略意图,千万不可小视!

特朗普的达沃斯“暴论”看似疯魔,实则藏着清晰的战略意图,千万不可小视!

识局Insight
2026-01-22 19:57:22
特朗普为何急转弯?承诺不对格陵兰动武,撤回对欧洲八国关税威胁

特朗普为何急转弯?承诺不对格陵兰动武,撤回对欧洲八国关税威胁

40度观察
2026-01-22 17:51:42
曼联官方:卡塞米罗将在本赛季结束后以自由球员身份离队

曼联官方:卡塞米罗将在本赛季结束后以自由球员身份离队

懂球帝
2026-01-23 01:06:12
丹麦首相:北约秘书长无权代表丹麦谈判

丹麦首相:北约秘书长无权代表丹麦谈判

财联社
2026-01-22 20:18:07
李亚鹏曝明星捐赠:邓超胡军百万,杨恭如千万,王菲超三千万

李亚鹏曝明星捐赠:邓超胡军百万,杨恭如千万,王菲超三千万

最美的巧合
2026-01-22 17:53:34
法媒:历史天平再次向中国倾斜

法媒:历史天平再次向中国倾斜

参考消息
2026-01-21 14:13:48
他就是个下棋的,却被你们当了一辈子鸡血

他就是个下棋的,却被你们当了一辈子鸡血

下岗女神
2026-01-22 17:29:32
央视确认!3家中超争冠队欲签李昊,欧洲队也在关注,身价2000万

央视确认!3家中超争冠队欲签李昊,欧洲队也在关注,身价2000万

我爱英超
2026-01-22 19:24:27
央视曝光毒红薯!商户主动投毒,流窜至全国多地,背后利益链曝光

央视曝光毒红薯!商户主动投毒,流窜至全国多地,背后利益链曝光

阿纂看事
2026-01-22 11:14:33
30元都没人收?马钞“通货”遭集体抛弃,币商这次彻底“不玩了”

30元都没人收?马钞“通货”遭集体抛弃,币商这次彻底“不玩了”

老孟谈钱
2026-01-22 12:05:05
今年多名厅官主动投案!首个投案的是任职8年的州长

今年多名厅官主动投案!首个投案的是任职8年的州长

上观新闻
2026-01-22 14:27:07
女子违停竖中指被撞后续!正脸曝光全网社死,司机发声,警方介入

女子违停竖中指被撞后续!正脸曝光全网社死,司机发声,警方介入

离离言几许
2026-01-22 11:52:29
比亚迪起诉博主“大秦军陕团”一案一审判决:博主被判赔偿201万元;曾编造“方程豹‘豹5’百公里油耗18升”

比亚迪起诉博主“大秦军陕团”一案一审判决:博主被判赔偿201万元;曾编造“方程豹‘豹5’百公里油耗18升”

大风新闻
2026-01-22 15:47:16
U23亚洲杯23日赛程:诞生季军!中国队赛前获喜讯,1-0日本=夺冠

U23亚洲杯23日赛程:诞生季军!中国队赛前获喜讯,1-0日本=夺冠

侃球熊弟
2026-01-23 00:18:00
从“国民妈妈”到1.2亿罚单:闫学晶为何一夜崩盘?

从“国民妈妈”到1.2亿罚单:闫学晶为何一夜崩盘?

社会日日鲜
2026-01-22 12:46:27
载有中国游客的旅游大巴在俄发生事故

载有中国游客的旅游大巴在俄发生事故

新华社
2026-01-22 18:23:37
牢A讲得好:为什么陪读母女一定会被猎艳,是100%,没有例外

牢A讲得好:为什么陪读母女一定会被猎艳,是100%,没有例外

红色少女主播
2026-01-22 17:06:13
俄罗斯发动大规模空袭,导弹中途居然还会转向,基辅一半地区停电

俄罗斯发动大规模空袭,导弹中途居然还会转向,基辅一半地区停电

碳基生物关怀组织
2026-01-20 19:48:05
2026-01-23 02:23:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1721文章数 72关注度
往期回顾 全部

科技要闻

几千亿只是开胃菜,AI基建还得再砸几万亿

头条要闻

“和平委员会”签约国家名单公布 西欧国家无一参加

头条要闻

“和平委员会”签约国家名单公布 西欧国家无一参加

体育要闻

跑个步而已,他们在燃什么?

娱乐要闻

车银优赚800亿 涉嫌逃税200亿!

财经要闻

西贝拿到“救命钱”,然后呢

汽车要闻

配备多块娱乐屏 极氪8X内饰曝光

态度原创

房产
教育
旅游
健康
军事航空

房产要闻

开年王炸!四重政策红利加码,广州置业窗口期迈入倒计时!

教育要闻

32岁程序员倒在客厅:请告诉孩子,这3条底线比考满分重要!

旅游要闻

广货行天下!从一粒米到一桌年味,广东文旅的“带货”新玩法

打工人年终总结!健康通关=赢麻了

军事要闻

普京:愿意向"和平委员会"提供10亿美元

无障碍浏览 进入关怀版