容器
容器是一种可以存放多个数据的数据类型
python提供的容器有列表,元组,集合,字典
列表
常见的列表(顺序表,链表,栈,队列) --基于链表的数据结构来实现
python里面是没有数组的,数组的存储空间是连续的,所以其查询更快,增删改慢
python中的列表一般由双向链表来实现(每一个节点有三个区域:头指针,尾指针和数据区)
写法:
ls = [1,2,3,4] 可以用来写列表常量,本质是直接创建列表
ls = list([1,2,3,4]) 可以用来进行数据类型的转化,浅拷贝,其实地址较内部的[]已发生改变
通过索引(从0开始)来遍历列表
用while来展示
list1 =[1,2,3,4] index = 0 while index < len(list1): #len来查看列表的长度 print(list1[index]) index=index+1常见方法:
append() 向尾部添加数据
insert(index,object)向指定位置添加元素
sort()排序,只能排int,字母按照ASCll编码
index()查找元素第一次在列表中出现的位置,如果没有这个元素则会报错
reverse() 列表倒转
remove() 通过元素来移除元素,没有该元素则会抛出异常
count() 统计元素总数
clear() 清除元素
copy() 浅拷贝对象,不是引用传递,在堆内存中进行对象拷贝
extend() 合并列表
pop() 删除最后一个元素,并返回该元素,可pop(i)
一些细节点:
1.数据的替换可以通过索引直接赋值
2.list内部的数据类型可以不同
3.list内部可以有list
举个例子:
p = ['asp', 'php']
s = ['python', 'java', p, 'scheme']
拿到s里的php的索引是s[2][1]
集合
set() 哈希结构
语法
s = set({1,2,3,4}) 创建集合并赋值
注意set()是必写的,如果直接写s={}这是创建了一个字典,而非集合
因为和hash相关,所以是无序的,并且是不能重复的,不能通过索引来查找
方法
clear()
remove()
copy()
add() 添加元素,如果元素重复,则不能进行添加,因为涉及到hash算法
difference 差集
intersection 交集
union 并集
update 更新集合,合并集合,
discard 移除元素
元组
元组的创建:
t =(1,2,3,4)
全局元素创建:t = tuple(元素...)
元组是有序的,可以通过索引来查找数据;下标亦可以是负数,但是不可赋值
元组是一个不可变元素,所以创建之后,它的数据就不能改变,但如若元素是可变元素,则会改变
举例:
t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
这种情况下,元组的数据发生改变,但实际上改的是元组内部列表的值;而元组的不变是内部元素的地址指向不变。
字典
在其他语言中也称为map,是用键值对的形式来进行存储的
dict =({"name":"sgxm","age":"16"})
方法
clear,get
keys()返回所有的键
values() 返回所有的值
setdefault(key,默认值) 设置默认值
查询 key,如果 key 不存在,就自动新增这个键并赋值;存在就直接返回原有值,不会修改
items 返回键值对 (可迭代的对象)
pop(key)通过键来移除键值对,如果没有则抛出异常
popitem 删除并返回字典最后插入的一组键值对
遍历的方法:
for k in d: print(k,d.get(k)) for k in d.keys(): print(k,d[k]) for k,v in d.items(): print(k,v)字符串
常见方法
count() 字符或字符串出现的次数
endswith() 判断字符串是否以xxx结尾
startswith() 判断字符串是否以xxx开头
index() 查找字符串出现的位置,无则抛出异常
rindex()反方向的找,查找最后一个位置
find()查找字符或字符串在字符串第一次出现的位置,如果不存在返回-1
rfind()
encode(编码形式)将字符串转化为字节的方法
相较于index(),find()程序不会崩溃
format() 格式化字符串
name = "小明" age = 18 s = "姓名:{},年龄:{}".format(name, age) # 下标写法 s2 = "姓名:{0},年龄:{1}".format(name, age) # 关键字参数 s3 = "姓名:{n},年龄:{a}".format(n="小明", a=18)is...()这种都是对字符串内容进行判断
title() 转化为标题形式
lower() 转化为小写
upper() 转化为大写
split("") 以什么符号切割字符串,返回列表
strip()清空两侧空格
lstrip()
rstrip()
join() 分隔符去主动连接序列
names = ["张三","李四","王五"] print(" | ".join(names)) # 张三 | 李四 | 王五ljust()左对齐
rjust()