Python學習筆記六_集合與經常使用小技巧

這篇學習筆記先簡單記錄幾個經常使用python中的小技巧,而後來學習集合。python

1、經常使用小技巧

一、非空即真,非0即真

不爲空的話就是true,是空的話就是false
只要不是0就是true,是0就是falseapp

name = input('輸入姓名').strip()
if name: #輸入姓名不爲空
    print('輸入正確')
else: #name = ‘’
    print('輸入不能爲空')
print(bool('')) #False
print(bool('abc')) #True

二、同時定義多個變量

a = b = c = 0 #定義了3個變量,值都是0

三、交換變量

   (1) 不經過中間變量如何交換性能

a = a + b
b = a - b
a = a - b

   (2) python中如何交換學習

b,a= a,b #交換兩個變量的值,Python底層幫你引入了一個的第三方變量在交換

   (3) 交換三個變量測試

a = 1
b = 'a'
c = True
a,b,c = c,a,b #交換三個變量的值,三個變量能夠是不一樣的類型
print(a,b,c) #True 1 a

四、深拷貝與淺拷貝

   (1) 順序循環刪list裏面的數據的時候,結果會不正確spa

         由於刪除的時候元素下標會發生變化code

l = [1,1,2,3,4,5,6,8]
#下標 0,1,2,3,4,5,6,7 i=0
#刪除下標爲0的1後l=[1,2,3,4,5,6,8]
#下標             0,1,2,3,4,5,6 i=1
#此時循環i=1,下標爲0的1被跳過去了
##刪除下標爲0的1後l=[1,2,3,4,5,6,8]
#下標              0,1,2,3,4,5,6 i=2

for i in l:
    if i%2!=0:
        l.remove(i) #下標爲0的1被刪除後,下標爲1的1變爲下標爲0了
print(l) #[1, 2, 4, 6, 8]

   (2) 想循環刪除的話,有兩個辦法blog

       i. 深拷貝一個一樣的list,循環深拷貝list,刪除原list元素接口

l = [1,1,2,3,4,5,6,8]
l2 = [1,1,2,3,4,5,6,8]
l3 =l
#不能寫成 l2=l,由於變量存的是內存地址,l2與l指向同一個內存地址,當l的值發生變化,l2的值一樣會發生變化
print(id(l)) #id查看內存地址
print(id(l2)) #l2的內存地址與l不一樣
print(id(l3)) #l3的內存地址與l相同
for i in l2:
    if i%2!=0:
        l.remove(i) #l中的元素下標變化,可是l2中的下標沒有發生變化
print(l)

        ii.倒着刪除,好處是不用新建一個list,節省了內存ip

l = [1,1,2,3,4,5,6,8]
i = len(l)-1 #循環的是下標,不是元素,因此len(l)-1
while i > -1:
    if l[i]%2!=0:
        l.remove(l[i])
    i -= 1
print(l)

   (3) 深拷貝與淺拷貝的區別是:深拷貝從新開闢內存空間,淺拷貝兩個變量存的是同一個內存地址

import copy
l = [1,1,2,3,4,5,6,8]
l2 =copy.deepcopy(l) #深拷貝,從新開闢內存空間
l3 = l #淺拷貝,存同一個內存地址
print(id(l))
print(id(l2))
print(id(l3))#淺拷貝和深拷貝的區別就是深拷貝會從新開闢一個內存空間
l2.append(9)
print(l) #[1, 1, 2, 3, 4, 5, 6, 8]
l3.append(10)
print(l) #[1, 1, 2, 3, 4, 5, 6, 8, 10]

2、集合

一、集合定義

集合也是一種數據類型,它的特性是天生去重,無續

s=set() #定義空集合,不能s={},這是空字典
s1 ={'1','1','3','4'} #直接定義集合
s2 = set('1234455') #把字符串轉換成集合,集合能夠直接去重
l = [1,2,3]
s3 = set(l)#把列表轉換成集合
print(s1) #{'4', '3', '1'}
print(s2) #{'4', '5', '2', '3', '1'}
print(s3) #{1, 2, 3}

二、集合的做用

   (1) 它能夠把一個列表中重複的數據去掉,而不須要再寫判斷

l = [1,1,2,3,3]
s = set(l)
print(s) #{1, 2, 3}

   (2) 能夠作關係測試,好比有兩個班,一個性能測試班,一個接口測試班,想找出既學了性能又學了接口的同窗,能夠用集合(交集)

三、集合操做

   (1) 交集、並集、差集、對稱差集

         交集:取兩個集合相同的地方

s1 = {1,2,3,4}
s2 = {3,4,5}
print(s1 & s2)#取交集 {3, 4}
print(s1.intersection(s2))#取交集{3, 4}

        並集:把兩個集合合併到一塊兒,而後去重

s1 = {1,2,3,4}
s2 = {3,4,5}
print(s1 | s2) #取並集,{1, 2, 3, 4, 5}
print(s1.union(s2)) #取並集,{1, 2, 3, 4, 5}

        差集:從是s1中去掉s1與s2的交集

s1 = {1,2,3,4}
s2 = {3,4,5}
print(s1 - s2) #取差集,{1, 2}
print(s1.difference(s2)) #取差集,{1, 2}

       對稱差集:去掉倆集合裏都有的

s1 = {1,2,3,4}
s2 = {3,4,5}
print(s1 ^ s2) #取對稱差集,{1, 2, 5}
print(s1.symmetric_difference(s2)) #取對稱差集,{1, 2, 5}

   (2) 集合的增刪改查:add(), remeve(), pop(), discard(), update()

s1 = {'a','b'}
s2 = {'hi'}
s1.add('c') #加元素
print(s1) #{'b', 'c', 'a'}
s1.remove('a')#指定刪除元素
print(s1)#{'b', 'c'}
s1.pop() #隨機刪除一個
print(s1)#{'c'}
s1.discard('ss')#若是刪除的元素存在,刪除,不存在不作處理
print(s1)#{'c'}
s1.update({'hello','hi'})#把另一個集合加進去
print(s1)#{'hello', 'c', 'hi'}

   (3)集合的方法

s1 = {'a','b'}
s2 = {'a'}
print(s1.isdisjoint(s2))#若是沒有交集的話返回True,false
print(s1.issubset(s2))#判斷s1是否是s2的子集,false
print(s1.issuperset(s2))#判斷s1是否是s2的父集,true
相關文章
相關標籤/搜索