python學習之四(集合的相關操作)
阿新 • • 發佈:2018-11-09
集合:
集合是由不同元素組成的,集合裡的元素是無序的,集合中的元素必須是不可變的。
集合的簡單定義:
s = {1,2,3,4,5,6,6}
print(type(s))
print(s)
輸出結果:
type表明了這是一個集合型別,輸出元素集合把重複的元素自動去除。另外利用這種方法也能建立一個集合:
# s=set('hello')
# print(s)
或者:
# s=set(['alex','alex','sb'])
# print(s)
#集合的內建方法 # s={1,2,3,4,5,6} # s.add(7) # s.remove(1) #刪除元素不存在會報錯 # s.discard(7) #刪除元組不存在不會報錯 # s.pop() # s1=s.copy() # print(s1,s)
集合的關係運算:
按照平時的迴圈來做第一列表與第二列表的關係運算也可以,但是特別麻煩,程式碼:
python_1=['張三','李四','王五']
linux_1=['劉六','李四','錢七']
python_and_linux_1=[]
for p_name in python_1:
if p_name in linux_1:
python_and_linux_1.append(p_name)
print(python_and_linux_1)
輸出結果:
如果用集合裡自帶的基本運算就會特別簡單,這裡要注意用的時候注意型別的轉換:
# #求交集 # print(p_s.intersection(l_s)) # print(p_s&l_s)
# #求並集
# print(p_s.union(l_s))
# print(p_s|l_s)
# #求差集
# print(p_s.difference(l_s))
# print(p_s-l_s)
# #交叉補集(合在一塊去掉共有的部分)
# print(p_s.symmetric_difference(l_s))
# print(p_s^l_s)
# #判斷子集 # s1={1,2} # s2={1,2,3} # print(s1.issubset(s2)) # #判斷父集 # print(s2.issuperset(s1)) # #更新多個值 # s1.update(s2) # print(s1)
字串拼接格式化:
百分號用法 %s表示傳遞一個字串型別的資料,後面的%表示要傳遞的內容
print('i am %s my hobby is %s' %('lucky','swimming'))
輸出:
還可以使用傳遞變數的形式:
name='lucky'
age=18
print('i am %s my age is %d' %(name,age))
print('i am %(name1)s my age id %(age1)d' %{"name1":"lucky","age1":18})
輸出結果:
字串格式化,去掉{}裡的數字也可以使用,按照順序傳值
# s='i am {0},age{1},{2}'.format("lucky",18,"love")
# s1='i am {name},age{age},{other}'.format(name='lucky',age=18,other='lover')
進位制轉化:
s2='numbers:{:b},{:o},{:d},{:x},{:X},{:%}'.format(15,15,15,15,15,15.567345,4)
print(s2)
輸出結果:
下面加上一段python遞迴的問路程式:
person_list = ['dog','cat','fish','cow']
def ask_way(person_list):
if len(person_list)==0:
return '沒人知道怎麼走'
person= person_list.pop(0)
if person=='fish':
return '%s說:我知道怎麼走' %person
print('問:hi %s,你知道怎麼走嗎?' %person)
print('%s回答:我不知道,我幫你問問%s' %(person,person_list))
res = ask_way(person_list)
print('%s問的結果是:%res' %(person,res))
return res
res=ask_way(person_list)
print(res)
輸出結果:
通過這段程式能更好體會遞迴的呼叫過程以及執行結束條件。