Python基礎 之 set集合 與 字符串格式化


數據類型的回顧與總結

可變與不可變
1.可變:列表,字典
2.不可變:字符串,數字,元組

 

訪問順序:
1.直接訪問:數字
2.順序訪問:字符串,列表,元祖
3.映射:字典

 

存放元素個數:
容器類型:列表,元祖,字典
原子:數字,字符串

 

 

set 集合

一、集合的基本屬性

1.不同元素組成
2.無序
3.集合中元素必須是不可變類型(字符串,數字,元組)

s = {1,2,3,4,5,6}
s = {1,2,3,3,3,3,3}
print(type(s))
print(s)
#<class 'set'>
#{1, 2, 3} 
set

 

定義方式

s = set('hello')
print (s)
#{'h', 'e', 'l', 'o'}


s1 = set('hello')
print(s1)

s2 = set(['root','root','even'])
print(s2)

#{'e', 'o', 'l', 'h'}
#{'even', 'root'}

 

set 集合 使用 for 循環里面的類型

如果有重復的值,則丟棄

 

二、集合的方法

1.add

添加,只能更新一個值,更新多個值使用 update

s = {1,2,3,4,5,6}
s.add('s')
print(s)
#{1,2,3,4,5,6,'s'}
add

 

2.clear

清除

s = {1,2,3,4,5,6}
s.clear()
print(s)
#set()
clear

 

3.copy

拷貝值

s1 = {1,2,3,4,5,6}
s2 = s1.copy()
print(s2)
#{1, 2, 3, 4, 5, 6}
copy

 

4.pop

隨機刪除一個值,並保留該值

s = {'e',1,2,3,4,5,6}
n = s.pop()
print(s)
print(n)
#{2, 3, 4, 5, 6, 'e'}
#1
pop

 

5.remove

刪除指定值,若刪元素不存在,IDEA會報錯

s = {'e',1,2,3,4,5,6}
s.remove('e')
print(s)
#{1, 2, 3, 4, 5, 6}

注意:
s = {'e',1,2,3,4,5,6}
s.remove('root')    #刪除元素不存在,會報錯
print(s)    
remove

 

6.discard

刪除指定值,若要刪除的元素不存在,IDEA不會報錯

s = {'e',1,2,3,4,5,6}
s.discard('root')    #刪除元素不存在,不會報錯
print(s)
#{1, 2, 3, 4, 5, 6, 'e'}
discard

 

三、集合關系運算

現在有兩個列表,求他們的交集

足球隊人員是張三、李四、王五

籃球隊人員是張三、王五、趙六

 

football = ['張三','李四','王五']
basketball = ['張三','王五','趙六']
#會踢足球的人員和會打籃球的人員
#如果不使用set集合的方式,使用list方式進行for循環,輸出兩門球類運動都會的人

all = []    #定義一個兩門都會的空列表
for f in football:  #將football內的元素for循環
    if f in basketball: #如果這些元素也在basketball內
        all.append(f)   #添加這些元素進入[]空列表

print(all)
#['張三', '王五']

 

1.intersection() 交集

通過 set的方法完成上面的要求

football = ['張三','李四','王五']
basketball = ['張三','王五','趙六']
#會踢足球的人員和會打籃球的人員
#使用set交集的方式,輸出兩門球類運動都會的人

f_s = set(football)     #將football轉換為f_s集合
b_s = set(basketball)   #將basketball轉換為b_s集合

print(f_s,b_s)
print(f_s.intersection(b_s))    #取f_s和b_s的交集

#{'張三', '王五', '李四'} {'張三', '王五', '趙六'}
#{'張三', '王五'}

 

2.union() 並集

football = ['張三','李四','王五']
basketball = ['張三','王五','趙六']
#會踢足球的人員和會打籃球的人員
#使用set並集的方式,輸出兩類總共人數

f_s = set(football)     #將football轉換為f_s集合
b_s = set(basketball)   #將basketball轉換為b_s集合

print(f_s,b_s)
print(f_s.union(b_s))    #取f_s和b_s的交集

#{'王五', '張三', '李四'} {'趙六', '張三', '王五'}
#{'趙六', '張三', '李四', '王五'}
union()

 

3.difference()差集

football = ['張三','李四','王五']
basketball = ['張三','王五','趙六']

f_s = set(football)     #將football轉換為f_s集合
b_s = set(basketball)   #將basketball轉換為b_s集合

print('差集1',f_s - b_s)      #f_s.difference(b_s) 等同於 f_s - b_s
print(f_s.difference(b_s))

print('差集2',b_s - f_s)      #b_s.difference(f_s) 等同於 b_s - f_s
print(b_s.difference(f_s))

#差集1 {'李四'}
#{'李四'}
#差集2 {'趙六'}
#{'趙六'}
difference()

 

4.symmetric_difference() 交叉補集

football = ['張三','李四','王五']
basketball = ['張三','王五','趙六']

f_s = set(football)     #將football轉換為f_s集合
b_s = set(basketball)   #將basketball轉換為b_s集合

print(f_s.symmetric_difference(b_s))    #f_s.difference(b_s) 等同於 f_s ^ b_s   

#{'李四', '趙六'}
symmetric_difference()

 

PS:這幾類方法后面加.update是求完值之后重新賦值

 

5.isdisjoint  issubset  issuperset

判斷有無交集  判斷是否是子集  判斷是否是父集

 

6.update

更新多個值 和add不同的是 add只能添加單個值

s = {'s','g','h'}
s.update('e','n',(10,1),[22,33],{50:2,30:4})
print(s)
#字符串和所有可迭代對象都可以被update添加
#{1, 33, 'e', 10, 's', 50, 22, 'g', 'h', 30, 'n'}

 

 

字符串的格式化

一、常用格式化

%字符的用處

msg = 'i am %s my hobby is %s' % ('even','python')
print(msg)
#i am even my hobby is python

 

msg1 = 'i am %s my hobby is %s' % ('even',123)
msg2 = 'i am %s my hobby is %s' % ('even',[1,2])
print(msg1)
print(msg2)
#i am even my hobby is 123
#i am even my hobby is [1,2]

 

打印浮點數

tpl = "percent %.2f" % 99.976238888    #.2f保留浮點數后兩位
print(tpl)
#percent 99.98

 

打印百分比

tpl = 'percent %.2f %%' % 99.976238888
print(tpl)
#percent 99.98 %

 

:分隔符拼接

print('root','x','0','0',sep=':')
#root:x:0:0

 

二、format 的常用格式化

tpl = "i am {}, age {}, {}".format("seven", 18, 'alex')
  
tpl = "i am {}, age {}, {}".format(*["seven", 18, 'alex'])
  
tpl = "i am {0}, age {1}, really {0}".format("seven", 18)
  
tpl = "i am {0}, age {1}, really {0}".format(*["seven", 18])
  
tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18)
  
tpl = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18})
  
tpl = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33])
  
tpl = "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1)
  
tpl = "i am {:s}, age {:d}".format(*["seven", 18])
  
tpl = "i am {name:s}, age {age:d}".format(name="seven", age=18)
  
tpl = "i am {name:s}, age {age:d}".format(**{"name": "seven", "age": 18})
 
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
#進制互轉格式化
 
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
 
tpl = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)
 
tpl = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15)

 

**代表字典對應格式化 

tpl = "i am {name:s}, age {age:d}".format(**{"name": "seven", "age": 18})
print(tpl)

 

 *代表列表對應格式化

tpl = "i am {:s}, age {:d}".format(*["seven", 18])
print(tpl)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM