Python基础知识1:列表list、集合set

来源:互联网 发布:老虎机的算法原理 编辑:程序博客网 时间:2024/06/05 18:56

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

阅读全文
0 0