Python 核心技术与实战
景霄
Facebook 资深工程师
114324 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
Python 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

05 | 深入浅出字符串

%
string.format()
find()
strip()
join函数
加法操作符
字符串拼接的时间复杂度
改变字符串内部字符的方法
制表符
换行符
字符串相等性
单引号、双引号、三引号
字符串的格式化
字符串拼接的效率
字符串的不可变性
字符串表示方式
推荐使用format函数的原因
格式化函数
其他常见函数
字符串分割函数split()
字符串拼接
索引、切片和遍历
字符串的不可变性
转义字符
字符串定义
思考题
总结
字符串的格式化
字符串的常用操作
字符串基础
深入浅出字符串

该思维导图由 AI 生成,仅供参考

你好,我是景霄。
Python 的程序中充满了字符串(string),在平常阅读代码时也屡见不鲜。字符串同样是 Python 中很常见的一种数据类型,比如日志的打印、程序中函数的注释、数据库的访问、变量的基本操作等等,都用到了字符串。
当然,我相信你本身对字符串已经有所了解。今天这节课,我主要带你回顾一下字符串的常用操作,并对其中的一些小 tricks 详细地加以解释。

字符串基础

什么是字符串呢?字符串是由独立字符组成的一个序列,通常包含在单引号('')双引号("")或者三引号之中(''' '''""" """,两者一样),比如下面几种写法。
name = 'jason'
city = 'beijing'
text = "welcome to jike shijian"
这里定义了 name、city 和 text 三个变量,都是字符串类型。我们知道,Python 中单引号、双引号和三引号的字符串是一模一样的,没有区别,比如下面这个例子中的 s1、s2、s3 完全一样。
s1 = 'hello'
s2 = "hello"
s3 = """hello"""
s1 == s2 == s3
True
Python 同时支持这三种表达方式,很重要的一个原因就是,这样方便你在字符串中,内嵌带引号的字符串。比如:
"I'm a student"
Python 的三引号字符串,则主要应用于多行字符串的情境,比如函数的注释等等。
def calculate_similarity(item1, item2):
"""
Calculate similarity between two items
Args:
item1: 1st item
item2: 2nd item
Returns:
similarity score between item1 and item2
"""
同时,Python 也支持转义字符。所谓的转义字符,就是用反斜杠开头的字符串,来表示一些特定意义的字符。我把常见的的转义字符,总结成了下面这张表格。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入浅出地介绍了Python中字符串的基础知识和常用操作。首先,文章从字符串的定义和表示方式入手,详细介绍了单引号、双引号和三引号字符串的使用方法,以及转义字符的应用。接着,文章讲解了字符串的常用操作,包括索引、切片、遍历以及字符串的不可变性。此外,还介绍了字符串拼接的方法,包括加法操作符和join函数的使用,以及字符串的分割函数split()。最后,文章提到了一些其他常用的字符串操作,如去除首尾空字符和查找子字符串的位置等。 在字符串的格式化部分,文章介绍了字符串格式化的概念和常见应用场景,以及在Python中的实现方式。通过清晰的例子和详细的解释,读者可以快速了解字符串格式化的方法和规范,包括使用format函数和%操作符的区别,以及推荐使用format函数的原因。 总的来说,本文内容通俗易懂,适合作为Python字符串入门的参考资料。读者可以通过本文快速了解Python中字符串的基本概念和常用操作,同时还可以学习到一些技巧和注意事项。对于初学者来说非常有帮助,同时也为有一定基础的读者提供了一些深入的思考和学习方向。文章内容涵盖了字符串的基础知识和格式化操作,为读者提供了全面的学习指南。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(111)

  • 最新
  • 精选
  • Jingxiao
    置顶
    关于思考题,如果字符串拼接的次数较少,比如range(100),那么方法一更优,因为时间复杂度精确的来说第一种是O(n),第二种是O(2n),如果拼接的次数较多,比如range(1000000),方法二稍快一些,虽然方法二会遍历两次,但是join的速度其实很快,列表append和join的开销要比字符串+=小一些。
    2019-05-20
    5
    127
  • 小云同学
    思考题:个人提一个更加pythonic,更加高效的办法 s = " ".join(map(str, range(0, 10000)))

    作者回复: 👍

    2019-05-20
    7
    240
  • Geek_morty137
    %format形式在东西多了以后比较费事,结构冗长,会导致错误,比如不能正确显示元组或字典。幸运的是,未来有更光明的日子。 str.format格式相对好一些,但参数多了或者处理更长字符串时还是冗长。 f-string这种方式可以更加简化表达过程。还支持大小写(f.或者F.)

    作者回复: 👍

    2019-05-20
    2
    33
  • Wing·三金
    直观上看似乎第二种方法的复杂度高一倍,但实际运行了下,第二种方法效率略高,当调高到50万的时候第二种的效率比第一种高出两倍以上。

    作者回复: 哈哈,对的。 如果字符串拼接的次数较少时,用+=更快,但是如果次数很大时,join稍快一些

    2019-05-20
    5
    25
  • farFlight
    这两个操作实际上时间相差无几,我把循环次数提高到一百万次还是伯仲之间。 另外请问老师python中对字符串采用 is 对比的问题。 比如代码: a = 'string' b = 'string' a is b 将返回True 而 a = 'string' a += '1' b = 'string1' a is b 则返回False 这个怎么解释比较好呢?为何第一个例子中a,b会指向同一个object呢?

    作者回复: 第一个例子中,'string'这个字符串对象只创建了一次,并同时被变量a和b指向,因此a is b返回True。 第二个例子中刚开始初始化的时候a和b的id就是不一样的,a is b就是False啊

    2019-05-20
    3
    18
  • 黑铁打野王
    既然是提升,能不能讲一下Python解释器对于String类型内存分配的知识?

    作者回复: 你好!这方面的内容你有兴趣可以自己去了解一下(google或者源码)。我的想法是专栏的内容还是实用为主,这种知识属于比较偏的了,工程当中用的很少,所以这里可能会省略

    2019-05-20
    2
    5
  • 代码1复杂度:O(1)×n,即O(n);代码2复杂度:O(1)×n+ O(1)×n=o(2n),因此代码1效率更高?

    作者回复: 试试同时比较range(1000)和range(10000000)两种情况的结果

    2019-05-20
    4
  • carpe_diem
    第一种更优,虽然在时间复杂度上,两种方式都是O(n),但是第一种方法的空间复杂度优于第二种方式,第一种方法的空间复杂度为O(1),第二种方法的空间复杂度为O(n)。另外,第一种写法显然也更简洁一些

    作者回复: 你同时测试一下 range(0, 100) 和 range(0, 1000000)的情况比较一下,看看两者的结果有什么不同?

    2019-05-20
    2
  • bbbi
    老师能够讲字符串稍微底层一点的东西吗? 例如字符串的内存分配回收,常量啥的?

    作者回复: 这个本专栏并没有涉及,考虑到没什么实用性。你如果感兴趣,可以都google一下这方面的资料

    2020-01-21
  • 拉拉
    老师,可不可以认为字符串是一个由字符组成的特殊元祖

    作者回复: 可以这么理解,不过一般没这个说法

    2019-09-03
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部