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

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[])

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)

#按位置删除

dellist[-3]# 删除倒数第三个

print('删除倒数第三个',list)

#删除特定元素

list.remove("a")# 删除元素a

print('删除特定元素,比如a:',list)

#反转元素

list.reverse()

print('反转元素',list)

#加备注

list[]='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]

foriinrange(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"inlist:# 判断是否存在一个元素

cnt = list.count("f")

print("个f".format(cnt))

执行结果:2个f

案例3:列表遍历

list = ["a","b,","c","d","f","f","g","h,","i"]# 写一个列表

forelementinlist:

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"]#写一个列表

forindex,valueinenumerate(list):

print("index:,value".format(index,value))

执行结果:

案例6:深浅copy的应用,浅copy只克隆第一层数据,不克隆第二层数据;深copy是完全克隆一份;

importcopy

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[]="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=

2)创建一个空集合set()

3)直接从列表中取

s=set()

li=[11,22,33,4,33]

s=set(li)

print(s)

如果看什么类型:

print(type(se))#

二、操作集合的方法

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

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("并集",ts)

print("差集,在t中不在s中",t-s)

print("对称差集,不会同时在s、t中",t^s)

if22ins :

print("22 in s中")

#完全包含

print(s.issubset(t))

print(s.issuperset(t))

集合应用案例:

defedits1(word):

n=len(word)

#循环删除一个字符,比如the,s1为[th,he,te]

s1=[word[:i]+word[i+1:]foriinrange(n)]

#调换一次位置,比如the,[hte,teh]

s2=[word[:i]+word[i+1]+word[i]+word[i+2:]foriinrange(n-1)]

#替换一个字符

s3=[word[:i]+c+word[i+1:]foriinrange(n)forcinalphabet]

#插入一个字符

s4=[word[:i]+c+word[i:]foriinrange(n+1)forcinalphabet]

returnset(s1+s2+s3+s4)

#执行

p=edits1('the')

print(p)

执行结果:

程序链接:https://pan.baidu.com/s/1hs3tcdY 密码:d2z0

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171217G0DOO100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励