1、列表list
列表的数据项不需要具有相同的类型
1)创建列表:
只要把逗号分隔的不同的数据项,且使用[]括起来,比如:
list=[]
list1 = ['physics', 'chemistry', 1997, 2000];
2)索引:
从0开始,可以使用负下标;0第一个元素,-1最后一个元素,索引顾头不顾尾
-len第一个元素,len-1最后一个元素
列表可以进行截取、组合等。
3)常见方法
列表操作包含以下函数:
1、cmp(list1, list2):比较两个列表的元素
2、len(list):列表元素个数
3、max(list):返回列表元素最大值
4、min(list):返回列表元素最小值
5、list(seq):将元组转换为列表
列表操作包含以下方法:
1、list.append(obj):在列表末尾添加新的对象
2、list.count(obj):统计某个元素在列表中出现的次数
3、list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4、list.index(obj):从列表中找出某个值第一个匹配项的索引位置
5、list.insert(index, obj):将对象插入列表
6、list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7、list.remove(obj):移除列表中某个值的第一个匹配项
8、list.reverse():反向列表中元素
9、list.sort([func]):对原列表进行排序
#案例:
list = ["a", "b,", "c", 1, 2, 3, 4, 5]
print('原始列表:',list)
print('--------------------------')
print('取第一个值:',list[0])
print('取最后一个值:',list[-1])
print('取前5个值:',list[:5])
print('取后5个值:',list[-5:])
print('取出列表中第3-8的值',list[2:7])
print('计算元素个数:',len(list))
print('统计某个元素如a在列表出现的次数',list.count("a") )
print('-----------------------')
#追加元素
list.append("m")
print('增加一个元素后:',list)
#追加列表
list3=[7,8,9]
list.extend(list3)
print("末尾追加一整个列表",list)
#插入元素
list.insert(2, "n")#指定位置的地方插入位置
print('2位置插入元素',list)
#删除元素
list.pop() # 默认删除最后一个元素
print('删除最后一个元素',list)
#按位置删除
del list[-3] # 删除倒数第三个
print('删除倒数第三个',list)
#删除特定元素
list.remove("a") # 删除元素a
print('删除特定元素,比如a:',list)
#反转元素
list.reverse()
print('反转元素',list)
#加备注
list[0]='a(组长)'
print('把第一个名字加上组长备注:',list)
print('-------------------------')
#排序
list=[6,7,3,4,5,8]
print('排序前',list)
list.sort() # 返回
print('排序后',list)
print('返回列表的最大值',max(list))#需要列表是数值
执行结果:
4)案例
案例1:修改列表中的某一元素
list = ["a", "b,", "c", 1, 2, 3, 4, 5, 4, 4]
for i in range(list.count(4)): # 设定循环次数
index_num = list.index(4) # 每次循环定位元素
list[index_num] = 444444 # 如果要删除,就可以直接改成值,del list[index_num]
print(list)
执行结果:['a', 'b,', 'c', 1, 2, 3, 444444, 5, 444444, 444444]
案例2:判断列表中是否存在一个元素
list = ["a", "b,", "c", "d", "f", "f", "g", "h,", "i"] # 写一个列表
if "f" in list: # 判断是否存在一个元素
cnt = list.count("f")
print("{0}个f".format(cnt))
执行结果:2个f
案例3:列表遍历
list = ["a", "b,", "c", "d", "f", "f", "g", "h,", "i"] # 写一个列表
for element in list:
print(element)
执行结果:
案例4:隔行取值
list = ["a", "b,", "c", "d", "f", "f", "g", "h,", "i"] # 写一个列表
print(list[0:-1:2]) #隔行取值,取值不含最后一个
print(list[0::2]) #隔行取值,取值含最后一个
执行结果:
案例5:enumerate同时获取索引、值
list=["a","b,","c","d"]#写一个列表
for index,value in enumerate(list):
print("index:{0},value{1}".format(index,value))
执行结果:
案例6:深浅copy的应用,浅copy只克隆第一层数据,不克隆第二层数据;深copy是完全克隆一份;
import copy
list=["a","b,","c",[1,2,3,4]] #这个list有两层数据,其中a、b、c在第一层,[1,2,3,4]为第二层
list2=list.copy() #当copy的时候
#浅copy只克隆第一层数据,不copy第二层数据,因为第二层数据本身就存在单独的地址;
#当list改变第一层数据时,不会再影响list2的第一层数据
# 当引用或更改第二层数据时,两个数据源list和list2都向第二层原有的地址,都会改变;
list[0]="A"#会引起第一层数据的变化,只改变list
list[3][2]=222#会引起第二层数据的变化,list和list2都会改变
print(list) #执行结果:['A', 'b,', 'c', [1, 2, 222, 4]]
print(list2)#执行结果未改变a:['a', 'b,', 'c', [1, 2, 222, 4]]
#即使list2去改变第二层数据,list、list2的第二层数据都会
list2[3][3]="e" #浅copy,同时改变list
print(list)#['A', 'b,', 'c', [1, 2, 222, 'e']]
print(list2)#['a', 'b,', 'c', [1, 2, 222, 'e']]
#deepcopy是完全克隆一份,新数据源和原来的数据源已无关系
list4=copy.deepcopy(list)
list[1]="B"
list4[3][3]="d"
print(list)#['A', 'B', 'c', [1, 2, 222, 'e']]
print(list4)#['A', 'b,', 'c', [1, 2, 222, 'd']]
2、集合
集合类似于列表,但集合里面会把重复的元素去除,
集合的特点是无序,不重复;
一、创建集合方法:
1)直接写值法s1={11,22}
2)创建一个空集合set()
3)直接从列表中取
s=set()
li=[11,22,33,4,33]
s=set(li)
print(s)
如果看什么类型:
print(type(se))#<class 'set'>
二、操作集合的方法
1、创建、增加、删除集合
print('----------创建集合-----------------')
#创建集合s1
A=set('boy')
print('集合A',A)#会把所有元素拆开
#创建集合B
li=['a','b','c','d','e']
B=set(li)
print('集合s2',B)
print('-----------增加元素----------------')
#add方法增加元素,但是元素的位置不固定
A.add('python')
print('用add使A增加元素:',A)
#update增加多个元素
B.update([10,37,42]) # 在s中添加多项
update需要一个可以for循环的东西,比如字符,列表、元祖
print('用update使B增加多个元素:',B)
li=("mlh")
A.update(li)
print('用update使B增加多个元素:',A)
print('-----------删除元素----------------')
#discard移除元素,若元素不存在,也不报错
A.discard('python')
print('discard移除不报错:',A)
B.pop()#随机移除一个元素
print('pop随机移除',B)
A.remove("b")#移除元素,若元素不存在,则报错
print('remove移除,不存在会报错',A)
执行结果:
2、difference比较异同
A=set('abc')
B=set('bcef')
print(A,B)
#A中存在,B中不存在
print("A中存在,B中不存在:",A.difference(B))
#B中存在,A中不存在
print("B中存在,A中不存在:",B.difference(A))
#A、B非共同存在的
print("A、B非共同存在的:",A.symmetric_difference(B))
#把A中存在,B中不存在的结果更新给A,且替换A
A.difference_update(B)
print('把A中存在,B中不存在的结果更新给A,且替换掉A',A)
执行结果:
3、集合支持一系列标准的操作
a = t | s # t 和 s的并集 ,s.union(t)
b = t & s # t 和 s的交集
c = t – s # 求差集(项在t中,但不在s中)
d = t ^ s # 对称差集。项在t或s中,但不会同时出现在二者中symmetric_difference(t)
x in s #测试 x 是否是 s 的成员
x not in s #测试 x 是否不是 s 的成员
s.issubset(t) #s <= t 测试是否 s 中的每一个元素都在 t 中
s.issuperset(t) #s >= t ,测试是否 t 中的每一个元素都在 s 中
print('----------集合标准操作-----------------')
t={11,22,33}
s={11,22,55}
print('t',t)
print('s',s)
print("交集",t&s)
print("并集",t|s)
print("差集,在t中不在s中",t-s)
print("对称差集,不会同时在s、t中",t^s)
if 22 in s :
print ("22 in s中")
#完全包含
print(s.issubset(t))
print(s.issuperset(t))
集合应用案例:
def edits1(word):
n=len(word)
#循环删除一个字符,比如the,s1为[th,he,te]
s1=[word[0:i]+word[i+1:] for i in range(n)]
#调换一次位置,比如the,[hte,teh]
s2=[word[0:i]+word[i+1]+word[i]+word[i+2:] for i in range(n-1)]
#替换一个字符
s3=[word[0:i]+c+word[i+1:] for i in range(n) for c in alphabet]
#插入一个字符
s4=[word[0:i]+c+word[i:] for i in range(n+1) for c in alphabet]
return set(s1+s2+s3+s4)
#执行
p=edits1('the')
print(p)
执行结果:
程序链接:https://pan.baidu.com/s/1hs3tcdY 密码:d2z0