python号称是为每一个问题提供一个最好的解决方案,所以我们可以看到python为字符串操作提供了大量的函数,以最好的解决各种问题。但如此多的函数多少会让人有些晕,所以这里总结一些常用的用法。
I,字符串定义
stra=’abcd’
strb=”abcd”
strc=“‘abcd
efgh’”
strd=str(“abcd”) str()即为字符串类的构造函数
II,字符串的赋值与拷贝
stre=stra
strf=copy.copy(stra)
strg=copy.deepcopy(stra)
strh=stra[:]
上面是几种不同的赋值操作,从效果上来说是一样的。
这里主要是想说一说对象的赋值与拷贝。因为字符串对象是常量,所以上面的几种赋值方法得到stre, strf, strg, strh都指向同一个对象。但如果将上面的字符串换成变量,则:
stre和stra指向同一个对象,strf, strg, strh指向不同的对象。
因为stre=stra仅仅是创建了一个对stra对象的引用,而对象的拷贝则是创建了一个新的对象,拷贝又分为浅拷贝和深拷贝,浅拷贝只创建新的容器,而深拷贝则创建新的容器和容器里的内容。
关于python的对象,还有更有意思的东西。
a=1
a=2
实际上这两个a指向的是不同的对象。
因为在python中,为了追求更高的效率,对对象的修改实际上生成一个新的对象,就的对象在没有引用后,会被自动回收。
注:
id(object)用来查看对象的id,由此判断是否是同一个对象
object.str用来查看对象的内存地址
III, 字符串的常用操作
1, strlen
len(str)
len()函数实际上是用来计算序列中的元素的个数,同样适用于字符串
2, strcpy
copy.copy()
b=a
3, strcat
str1 = ‘abcd’
str2 = ‘efgh’
str1 += str2
4, strchr(str1, str2)
str1.find(str2)
str1.index(str2) 当找不到str2的时候,会raise error
5, strcmp(str1, str2)
cmp(str1, str2)
同样cmp()函数也是针对通用对象的函数。
6, strlwr(str1) strupr(str1) 转换大小写
str1=str1.lower()
str1=str1.upper()
7, 反转字符串
str1=str1[::-1]
或者
strtmp=list(str1)
strtmp.reverse()
str1=”.join(strtmp)
IV, cookbook中的例子:
1, 顺序处理字符串中的每一个字符
str1=’abcd’
thelist=list(str1)
或者
for c in str1:
do_some_thing
或者
resule=[do_some_thing for c in str1]
2, 字符和数字之间的转换
print ord(‘a’)
print chr(97)
3, 测试object是否是字符串
isinstance(str1, basestring)
basestring是builtin中定义的字符串的基类,str和unicode都是由他继承来的。所以这种方法有较好的通用性。
另外一种常用但不推荐的方法:
type(str) is type(”)
4, 对齐字符串
str1.ljust(20) 向左对齐,不足20的位置用空格填充
str1.ljust(20, ‘+’) 向左对齐,不足20的位置用’+’填充
str1.rjust(20)
str1.center(20)
5, 去除字符串两侧的空格
str1.lstrip()
str1.rstrip()
str1.strip()
6, 链接字符串
str1=str1+str2
假设pieces是一个list,list中包含了多个字符串:
str1=”.join(pieces)
格式化字符串
str1=’%s%s something %s yet more’ % (str2, str3, str4)