python的内置类型(1)-----字符串

1. 字符串的实现细节

python的字符串是不可变的,这既是它的缺点,也是它的优点
一方面由于字符串的不可变性,字符串可以作为字典的键或集合的元素,因为一旦初始化之后字符串的值就不会改变
另一方面每当修改字符串时,哪怕只是一个非常微小的改变,都需要创建一个全新的字符串实例,内存地址发生改变.如下图:
在这里插入图片描述

2. 字符串拼接

由于python的字符串是不变的,在需要合并多个字符串实例时可能会产生一些问题,如前所述,拼接任意不可变序列都会产生一个新的序列对象,下面我们使用多个字符串拼接为一个字符串

list_data = ["pig", "like", "eat"]
s = ""
for data in list_data:
    s+= data

如上:运行时间成本和字符串总长度是成正比的,换句话说,这种方法效率是非常低的,处理这种问题可以用str.join()方法,它接受可迭代的字符串作为参数,返回合并后的字符串

list_data = ["pig", "like", "eat"]
s = "".join(list_data)
print(s)  # piglikeeat

这样看起来三个单词实在没法看,不过没关系,字符串的这一方法还可以用在需要合并的多个字符串插入分隔符

list_data = ["pig", "like", "eat"]
s = " ".join(list_data)
print(s) # pig like eat

这样看起来就顺眼多了
虽然join()方法速度更快(针对大型列表来说),并不意味着在所有需要拼接的地方都使用这一方法,以为在实际应用中要 注 意 可读性 还是非常重要的!!!在很多情况下,join()的性能甚至还不如加法的普通拼接.
例:

  1. 如果子字符串的数量很少,而且已经包含在某个可迭代对象中,那么在某些情况下,创建一个新的新序列来进行拼接操作的开销可能会超过使用join()节省下来的开销
  2. 在拼接短的字面值时,由于cpython中的常数折叠,一些复杂的字面值(不只是字符串)在编译时会被转换为更短的形式,例如"a"+“b”+“c"被转换为"abc”,当然,这只适用于相对短的变量

3. 字符串格式化

如果事先知道字符串的数目,可以使用字符串格式化的方法来保证字符串拼接的最佳可独性,字符串格式化可以使用str.format()方法或%运算符.
例:

name = "张三"
age = 23
print('my name is {}'.format(name))  # my name is 张三
print('my name is %s' % name)  # my name is 张三
print("my age is %d" % age)  # my age is 23
格式化字符串中的%占位符和类型码:
占位符描述
% s转为字符串, 使用str(x)函数转换
% r转为字符串, 使用repr(x)函数转换
% c整数转为单个字符
% d数字转为十进制整数
% o整数转为八进制整数
% x整数转为十六进制整数(字符a - f小写)
% X整数转为十六进制整数(字符A - F大写)
% e指数浮点数(e小写), 如: 2.9e+10
% E指数浮点数(E大写), 如: 11.3E+10
% f, % F转为十进制浮点数
% g, % G十进制形式浮点数或指数浮占数自动转换
% %等同于一个 % 字符
占位符 % 和类型码之间的格式语法 
% [- + 0 宽度.精度]类型码
-左对齐(默认为右对齐)
+显示正号
0左侧空白位置补零
宽度整个数据输入的宽度
精度保留小数点后多少位(默认为6位))

示例:

    "%5d" % 123   # '  123' 五位,左边默认补空格
    '%-5s' % 'abc' # 'abc  ' '五位,左对齐,右侧补空格
    "%+d" % 123    # '+123'
    '%+010d' % 123  # '+000000123'右对齐,左侧空位补0
    '%7.2f'  print('aa%7.2f' % 3.1415926535)  # aa   3.14

4. 用转义字符代表特殊字符

字符串字面值中用字符反斜杠\ 后跟一个或一些字符代表特殊
的一个字符

   字符串中转义字符:


    \'    一个单引号
    \"    一个双引号
    \\    一个斜杠
    \n    换行符
    \r    返回光标至行首
    \f    换页
    \t    水平制表符
    \v    垂直制表符
    \b    倒退

5. 常用字符串方法

方法描述
S.isdigit()判断字符串中的字符是否全为数字
S.isalpha()判断字符串是否全为英文字母
S.islower()判断字符串所有字符是否全为小写英文字母
S.isupper()判断字符串所有字符是否全为大写英文字母
S.isspace()判断字符串是否全为空白字符
S.center(width[,fill])将原字符串居中,左右默认填充空格
S.count(sub[, start[,end]])获取一个字符串中子串的个数
S.find(sub[, start[,end]])获取字符串中子串sub的索引,失败返回-1
S.strip([chars])返回去掉左右char字符的字符串(默认char为空白字符)
S.lstrip([chars])返回去掉左侧char字符的字符串(默认char为空白字符)
S.rstrip([chars])返回去掉右侧char字符的字符串(默认char为空白字符)
S.upper()生成将英文转换为大写的字符串
S.lower()生成将英文转换为小写的字符串
S.replace(old, new[, count])将原字符串的old用new代替,生成一个新的字符串
S.startswith(prefix[, start[, end]])返回S是否是以prefix开头,如果以prefix开头返回True,否则返回False,
S.endswith(suffix[, start[, end]])返回S是否是以suffix结尾,如果以suffix结尾返回True,否则返回False
S.title()生成每个英文单词的首字母大写字符串
S.isnumeric()判断字符串是否全为数字字符
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值