测开3 - python(切片、集合及其他小方法)

一、切片

其实就是对 list/string 的一种取值方式,只取值,不改变原有的值,应用如下:

1 List = ['apple','banana','orange','blue','green','red','yellow']
2 print(List[:3])    #切片取值顾头不顾尾
3 #结果:['apple','banana']
4 
5 s = '123456789'
6 print(s[::-1])    #最后一位数代表部长,1时挨个取,2时隔1取1,-1时倒序取,但此时要写范围的话也应该是负数
7 #结果:987654321

先做个练习,之后引入一个比较重要的概念

1 li = [1,1,2,3,3,4,5,6,7,8,9]
2 for i in li:
3     if i%2!=0:
4       li.remove(i)
5 print(li)

这个练习,看上去像是通过循环把 list 中的奇数删除,但实际运行一下就知道,结果没有想象的那么简单)结果为:[1, 2, 4, 6, 8]

那为什么会这样子呢,这是因为,list 在循环的时候,实际循环的是它的下标,当某个元素被删除后,下标也就随之改变,这样一来,有的元素就判断不到了。所以应该找到一种方式,使循环的时候不要删除 list 的元素,这样下标不会错乱,每个元素就能被判断到了。

这里就可以用上切片取值,加 list2 = li[:]

1 li = [1,1,2,3,3,4,5,6,7,8,9]
2 list2 = li[:]
3 for i in li2:
4     if i%2 != 0:
5         li.remove(i)
6 print(li)

之所以不用 list2 = li 这种直接赋值的方式,这里又扯出俩概念,深拷贝和浅拷贝

深拷贝就是只把值赋值过来,但另外开辟一块内存空间,li 改变时 list2 不会改变

  a. list2 = li[:]

  b. list2 = copy.deepcopy(li)

浅拷贝是 ‘list2 = li’这种方式,这样的操作其实是两个 list 共享一块内存地址,li 变了的时候,list2 也会改变

二、集合

集合天生去重,是无序的,定义方式:

a = set()     #空集合
b = {'a','b','c','d'}    #非空集合

list 转成字符串的方式同样也适用于集合转成字符串,可以用在需要把集合内容写入文件时。

1. 集合的一些操作

1 s = set()    #空集合
2 s.add(1)    #添加元素
3 s.remove(1)    #删除元素

2.交集、并集、差集、对称差集

交集:取两个集合共同部分 - a.intersection(b) 或者 a&b

并集:两个集合合并起来并去重 - a.union(b) 或者 a|b

差集:a.difference(b) 取集合 a 有,但是集合 b 没有的元素 - a.difference(b) 或者 a-b

对称差集:把两个集合都有的去除,保留两个集合中不一样的部分 - a.symmetric_difference(b) 或者 a^b

 1 xn = ['xiaohei','xiaobai','xiaohuang','xiaolan']
 2 zdh = ['xiaohei','xiaobai','xiaozi','xiaolv','xiaohong']
 3 
 4 xn_set = set(xn)
 5 zdh_set = set(zdh)
 6 
 7 # print(xn_set.intersection(zdh_set)) #取交集
 8 # print(xn_set & zdh_set  )#取交集
 9 
10 # print(xn_set.union(zdh_set)) #并集 #把俩集合加一起,重复的去除
11 # print(xn_set |zdh_set )#并集
12 
13 # print(xn_set.difference(zdh_set)) #差集,在a集合里面有,在b集合里面没有的
14 # print(xn_set - zdh_set) #差集
15 
16 print(xn_set.symmetric_difference(zdh_set)) #对称差集,把两个集合里面都的去除
17 print(xn_set ^ zdh_set )  #对称差集

三、非空即真非0即真、列表生成式、三元表达式

1. 非空即真非0即真

可以用在条件判断,比如判断一个 list 是否为空,直接 ‘if list’ 就可以判断,取反的时候前面加 not,即 ‘if not list’

2. 列表生成式

 1 #列表生成式
 2 result = [ str(i).zfill(2)  for i in range(1,20) if i<8  ]
 3 print(result)
 4 
 5 #普通的实现方式
 6 result2 = []
 7 for i in range(1,10):
 8     if i<8:
 9         j = str(i).zfill(2)
10         result2.append(j)

以上第一种的实现方式等同于第二种,且第一种的执行顺序也是第二种表现的那样。作用:使代码看起来更简洁。

3. 三元表达式

 1 id_card = '410881199211111141'
 2 
 3 # 第一种实现方式
 4 # if int(id_card[-2]) % 2 == 0:
 5 #     sex = '女'
 6 # else:
 7 #     sex = '男'
 8 # print(sex)
 9 
10 # 第二种实现方式
11 sex = '' if int(id_card[-2])%2 == 0 else '' #三元表达式
12 print(sex)

满足条件则给变量赋前面的值,否则赋值 else 后面的。作用:使代码看起来更简洁。

猜你喜欢

转载自www.cnblogs.com/april-aaa/p/10974024.html