字符串
字符串是最 Python 中常用的数据类型,可以对字符串进行索引,切片及迭代。
在python中字符串是不可变的,一旦声明,不能改变;对字符串变量的赋值和修改实际上是新建了一个相同变量名的对象。
注意:由于字符串是不可变的,在使用索引修改字符串是不允许的
var1 = 'python'
print id(var1)
var1 = 'PHP'
print id(var1)
var1 = 'python'
print id(var1)
var1 = var1 + 'hello world'
print id(var1)
31385280
37524841
41536543
38144556
对比发现修改这些对字符串的修改、赋值实际上是创建了一个新的变量(它们的地址都不相同)
字符串的基本操作
+ :string1+string2 #联接字符串,将后一个串链接到前一个串的后面
* :string*n #创建一个新字符串重复n次原来的串
[] :string[n] #从字符串中获取对应位置的一个字符
[:] :string[n:m] #截取字符串,如果为:m从头到m如果为n:从n到尾
in :char in string #判断一个字符(串)是否在串中,如果在返回为真(True)
not in :char not in string #判断一个字符(串)是否不在串中,如果在返回为真(True)
r/R :r'hello\r\nworld' R'hello\r\nworld' #禁止转义字符的实际意义,整个字符为原始意义
% :'hello %s'%('world') #格式化字符串
len() : 长度len(s),与s.__len__()功能相同(其实len(s)本来就是调用的s.__len__())
Unicode字符串
python定义一个 Unicode 字符串和定义一个普通字符串一样
u'Hello World !'
但是它还可以自动转换Unicode-Escape 编码的字符
u'Hello\u0020World !' = u'Hello World !'
常用的几个方法
可以使用dir(str)查看有哪些内建函数
string = ''
string.find('str') #成功返回所在字符串的下标,失败返回负数
string.isalnum() #字符串的元素是否全为数字,是:true,否:false
string.replace('old', 'new') #替换字符串中的‘on’为‘oner’,并返回新的字符串
string.split('str') #按照'str'拆分字符串,返回一个列表(但注意,不要让被拆分的字符串长度(str)大于原字符串(string)的长度)
string.strip() #默认截掉字符串两边的空格,也可带参数:string.strip(str) 截掉字符串两端的str,如果有的话
string.count('sub') #统计'sub'在字符串中出现的次数
','.join(object) #以','为分割,合并一个可迭代的对象为字符串(但迭代的值必须为string)
使用格式化字符串比以‘+’连接字符串效率高(但是我测试了100W次,没发现大的区别)
就好像range和xrange,当次数小于10W时range占得资源并不多。效率也要高一些当大于100W时xrange效率更高
列表
基本操作
len([1, 2, 3]) 3 长度
[1, 2, 3] + [4, 5] [1, 2, 3, 4, 5] 组合
['Hi!'] * 3 ['Hi!','Hi!','Hi!'] 重复
3 in [1, 2, 3] True 元素是否存在于列表中
for x in [1, 2, 3]: print x, 1 2 3 迭代
del l[2] (l = [1,2,3]) [1,3] 删除元素
del l (l = [1,2,3]) None 删除列表
内建函数
list.append(obj) 在列表末尾添加新的对象
list.count(obj) 统计某个元素在列表中出现的次数
list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
list.insert(index, obj) 将对象插入列表
list.pop(obj=list[-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj) 移除列表中某个值的第一个匹配项
list.reverse() 反向列表中元素
list.sort([func]) 对原列表进行排序
元组
元组与列表类似,但是元组的元素不能修改
t = (1,2,3,4)
t[1] = 0 #这种方式是错误的
同样也不能使用del单独删除某一元素,但可以删除整个元组
t1 = (1,2)
t2 = (3,4)
t3 = t1 + t2 #合并两个元组称为新的元组
tuple(obj)可以将可迭代的对象生成一个新的元组
字典
基本操作
dic['key'] = value 修改或增加字典元素
del dic['key'] 删除字典元素
del dic 删除字典
内置函数
dic.clear() 删除字典内所有元素
dic.copy() 返回一个字典的浅复制
dic.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
dic.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
dic.has_key(key) 如果键在字典dict里返回true,否则返回false
dic.items() 以列表返回可遍历的(键, 值) 元组数组
dic.keys() 以列表返回一个字典所有的键
dic.setdefault(key, default=None) 和get()类似, 但如果键不已经存在于字典中,将会添加键并将值设为default
dic.update(dict2) 把字典dict2的键/值对更新到dict里
dic.values() 以列表返回字典中的所有值
集合
集合与列表相似,但值不能重复,
set()可以把可迭代对象生成集合类型,并将删除重复的值(可以利用这个特性,对某些对象去重)
基本操作
& 取交集
| 取并集
- 取差集
注意:
列表和字典在方法调用时是以引用的方式传递参数的,如果不希望在后面代码中使用被调用方法修改后的值,可以在参数传递之前,使用深拷贝将值复制给另一个参数。