一. 資料類型
數字類型
- 整形int
- 用途:年齡,等級,qq号等
-
定義方式
age=18 #age=int(18)
- 隻能存一個值, 且為不可變類型
x=11
print(id(x))
x=12
print(id(x))
- 浮點型float
- 用途:身高,體重,體質參數等
- salary = 3.1 # salary=float(3.1)
字元串
- 作用:名字,性别,國籍,位址等描述資訊
-
定義:在單引号\雙引号\三引号内,由一串字元組成
name='hello world'
- 該類型總結
1 隻能存一個值
2 有序
3 不可變:值變,id就變。不可變==可hash
優先掌握的操作:
- 按索引取值(正向取+反向取) :隻能取
print(msg[0],type(msg[0])) print(msg[-1])
- 切片(顧頭不顧尾,步長)
print(msg[0:3]) #>=0 <3 print(msg[0:7]) #>=0 <7 print(msg[0:7:1]) #>=0 <7 print(msg[0:7:2]) #hello w #hlow print(msg[:]) print(msg[5:1:-1]) print(msg[-1::-1])
- 長度len
print(msg.__len__()) print(len(msg)) #msg.__len__()
- 成員運算in和not in
msg='hello world' print('llo' in msg) print('llo' not in msg)
- 移除空白strip
password=' alex3714 ' print(password.strip()) password=input('>>: ').strip() password='alex 3714 ' print(password.strip())
- 切分split
user_info='root:x:0:0::/root:/bin/bash' res=user_info.split(':') print(res[0])
cmd='get /root/a/b/c/d.txt' print(cmd.split()) file_path='C:\\a\\d.txt' print(file_path.split('\\',1)) file_path='C:\\a\\d.txt' print(file_path.rsplit('\\',1))
- 循環
for i in range(len(msg)): #0 1 2 print(msg[i])
需要掌握的操作
- strip,lstrip,rstrip
print("**alex****".strip('*')) print("**alex****".lstrip('*')) print("**alex****".rstrip('*'))
- lower,upper
print('ALeX'.lower()) print('aaa'.upper())
- startswith,endswith
msg="hello world" print(msg.startswith('hello')) print(msg.startswith('h')) print(msg.endswith('world'))
- format的三種玩法
print('my name is %s my age is %s' %('alex',18)) print('my name is {} my age is {}'.format('alex',18)) print('my name is {} my age is {}'.format(18,'alex')) print('{0} {1} {0}'.format('alex',18)) print('my name is {name} my age is {age}'.format(age=18,name='male'))
- split rsplit
name='root:x:0:0::/root:/bin/bash' print(name.split(':')) #預設分隔符為空格 name='C:/a/b/c/d.txt' #隻想拿到頂級目錄 print(name.split('/',1)) name='a|b|c' print(name.rsplit('|',1)) #從右開始切分
- join
info='root:x:0:0' l=info.split(':') print(':'.join(l)) l=[1,2,3] print(':'.join(l)) #報錯:隻有在清單内的元素全是字元串類型,才能用join拼接
- replace
name='alex say :i have one tesla,my name is alex' print(name.replace('alex','SB',1)) #1為指定替換第幾個, 如果不寫就全部替換
- isdigit
age=input('>>: ').strip() print(age.isdigit()) #age='123' if age.isdigit(): age=int(age) else: print('必須輸入數字')
- 練習
# 寫代碼,有如下變量,請按照要求實作每個功能 (共6分,每小題各0.5分) name = " aleX" # 1) 移除 name 變量對應的值兩邊的空格,并輸出處理結果 # 2) 判斷 name 變量對應的值是否以 "al" 開頭,并輸出結果 # 3) 判斷 name 變量對應的值是否以 "X" 結尾,并輸出結果 # 4) 将 name 變量對應的值中的 “l” 替換為 “p”,并輸出結果 # 5) 将 name 變量對應的值根據 “l” 分割,并輸出結果。 # 6) 将 name 變量對應的值變大寫,并輸出結果 # 7) 将 name 變量對應的值變小寫,并輸出結果 # 8) 請輸出 name 變量對應的值的第 2 個字元? # 9) 請輸出 name 變量對應的值的前 3 個字元? # 10) 請輸出 name 變量對應的值的後 2 個字元? # 11) 請輸出 name 變量對應的值中 “e” 所在索引位置? # 12) 擷取子序列,去掉最後一個字元。如: oldboy 則擷取 oldbo。
# 1. print(name.strip()) # 2. print(name.startswith('al')) # 3. print(name.endswith('X')) # 4. print(name.replace('l','p')) # 5. print(name.split('l')) # 6. print(name.upper()) # 7. print(name.lower()) # 8. print(name[1]) # 9. print(name[:3]) # 10. print(name[-2:]) # 11. print(name.index('e',1)) # 12. print(name[:-1])
清單
- 作用:多個裝備,多個愛好,多門課程
- 定義:[]内可以有多個任意類型的值,逗号分隔
-
1 可以存多個值,值都可以是任意類型
3 可變:值變,id不變。可變==不可hash
- 按索引存取值(正向存取+反向存取):即可存也可以取
l=['zhao','qian','sun','li',5,6]
- 長度
print(l.__len__()) print(len(l))
-
print('zhao' in l)
- 追加
l.append(6) print(l )
- 删除
#單純的删除 del l[0] print(l) res=my_girl_friends.remove('yuanhao') print(my_girl_friends) print(res) print(my_girl_friends) #del和remove都沒有傳回值, 隻是删除
#删除并拿到結果:取走一個值 res=l.pop(2) res=l.pop() #預設删除并傳回清單最後一個值 print(res)
# my_girl_friends=['alex','wupeiqi','yuanhao',4,5] # print(my_girl_friends.pop(0)) #'alex' # print(my_girl_friends.pop(0)) #'wupeqi' # print(my_girl_friends.pop(0)) #'yuanhao'
my_girl_friends=['alex','wupeiqi','yuanhao',4,5]
i=0
while i < len(my_girl_friends):
print(my_girl_friends[i])
i+=1
for item in my_girl_friends:
print(item)
需要掌握的方法
- insert
l=['zhao','qian','sun','li',5,6]
l.insert(0,'wang') print(l)
- clear
l.clear() print(l)
- copy
l2=l.copy() print(l2)
- count
l.insert(0,'zhao') print(l.count('zhao'))
- extend
l1=['zhou','wu'] l.extend(l1) l.extend('hello') print(l) # ['zhao', 'qian', 'sun', 'li', 5, 6, 'zhou', 'wu', 'h', 'e', 'l', 'l', 'o']
- index
print(l.index('wu')) print(l.index('wuuuu'))
- reverse
l.reverse() print(l)
- sort
從python2.4開始,list.sort()和sorted()函數增加了key參數來指定一個函數,此函數将在每個元素比較前被調用。 例如通過key指定的函數來忽略字元串的大小寫:
>>> sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
key參數的值為一個函數,此函數隻有一個參數且傳回一個值用來進行比較。這個技術是快速的因為key指定的函數将準确地對每個元素調用。
更廣泛的使用情況是用複雜對象的某些值來對複雜對象的序列排序,例如:
>> student_tuples = [ ('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10), ] >> sorted(student_tuples, key=lambda student: student[2]) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
l=[1,10,4,11,2,]
l.sort(reverse=True)
print(l)
字元串大小比較
x='healloworld'
y='he2'
print(x > y)
- 匿名函數
##### 按年齡排序
l=[
{'name':'alex','age':84},
{'name':'oldboy','age':73},
{'name':'egon','age':18},
]
l.sort(key=lambda item:item['age'],reverse=False)
元組
- 作用:存多個值,對比清單來說,元組不可變(是可以當做字典的key的),主要是用來讀
- 定義:與清單類型比,隻不過[]換成()
age=(11,22,33,44,55) #本質age=tuple((11,22,33,44,55))
-
優先掌握的操作
- 按索引取值(正向取+反向取):隻能取
print(age[0:3])
print(age)
age=(11,22,33,44,55)
print(len(age))
age=(11,22,33,44,55)
print(11 in age)
for item in age:
print(item)
字典
- 用途:存放多個值,key:value,存取速度快
- 定義:key必須是不可變類型(int,float,str,tuple),value可以是任意類型
info={'name':'egon','age':18,'sex':'male'} #info=dict({'name':'egon','age':18,'sex':'male'})
-
1 可以存多個值,值都可以是任意類型,key必須是不可變類型
2 無序
- 按key存取值:可存可取
d={'name':'ross'} print(d['name']) d['age']=18 print(d)
info={'name':'ross','age':18,'sex':'male'}
print(len(info))
info={'name':'ross','age':18,'sex':'male'}
print('name' in info)
info={'name':'ross','age':18,'sex':'male'}
print(info.pop('name')) #指定删除name, 并傳回name對應的值
print(info)
print(info.popitem()) #('sex', 'male') #随機删除, 因為字典是無序的
print(info)
- 鍵keys(),值values(),鍵值對items() #了解
info={'name':'ross','age':18,'sex':'male'}
print(info.keys())
print(list(info.keys())[0])
print(list(info.values()))
print(list(info.items()))
info={'name':'egon','age':18,'sex':'male'}
for k in info:
print(k,info[k])
for k,v in info.items():
print(k,v)
其他需要掌握的方法
- get和pop
info={'name':'egon','age':18,'sex':'male'} print(info['hobbies']) #沒有hobbies這個key, 會報錯 print(info.get('hobbies','沒有')) #使用get方法, 如果沒有key, 會傳回設定的值 print(info.pop('name1',None)) #pop會删除對應key, 如果沒有, 會傳回設定的值
- update: 字典 update() 函數把字典參數d的 key/value(鍵/值) 對更新到字典 info 裡
info={'name':'egon','age':18,'sex':'male'} d={'x':1,'y':2,'name':'EGON'} info.update(d) print(info)
- setdefault
1:key存在,則不指派,key不存在則設定預設值
2:key存在,傳回的是key對應的已有的值,key不存在,傳回的則是要設定的預設值
info={'name':'egon','sex':'male'} value=info.setdefault('age',18) print(value) print(info)
- 小示例
info={'name':'egon',} info['hobbies']=[] info['hobbies'].append('music') info['hobbies'].append('read') print(info)
info={'name':'egon',} if 'hobbies' not in info: info['hobbies']=[] else: info['hobbies'].append('music')
hobbies_list=info.setdefault('hobbies',[]) print(hobbies_list) hobbies_list.append('play') hobbies_list.append('read') print(info)
#1 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值儲存至字典的第一個key中,将小于 66 的值儲存至第二個key的值中
#即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
l=[11,22,33,44,55,66,77,88,99,90]
d={'k1':[],'k2':[]}
for i in l:
if i < 66:
d['k1'].append(i)
if i >= 66:
d['k2'].append(i)
print(d)
# 2 統計s='hello alex alex say hello sb sb'中每個單詞的個數
# 結果如:{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}
s='hello alex alex say hello sb sb'
l=s.split()
d={}
for i in l:
d.setdefault(i,l.count(i))
print(d)
s='hello alex alex say hello sb sb'
l=s.split()
d={}
for i in l:
if i in d:
d[i]+=1
else:
d[i]=1
print(d)
# 簡單購物車,要求如下:
# 實作列印商品詳細資訊,使用者輸入商品名和購買個數,則将商品名,價格,購買個數加入購物清單,
# 如果輸入為空或其他非法輸入則要求使用者重新輸入
msg_dic={
'apple':10,
'tesla':100000,
'mac':3000,
'lenovo':30000,
'chicken':10,
}
goods=[]
while True:
for k in msg_dic:
print(k,msg_dic[k])
choice=input('what do you want to buy? : ')
if choice=='q':break
if not choice or choice not in msg_dic:continue
num=input('how many do you want to buy? : ')
if not num.isdigit():continue
t=(choice,num,msg_dic[choice])
goods.append(t)
print(goods)
集合
- 作用: 關系運算, 去重
- 定義: {}内用逗号分割每個元素都必須是不可變類型,元素不能重複,無序
-
s={1,2,3,1} #s=set({1,2,3,1}) print(len(s))
- 成員運算in, not in
names={'egon','alex'} print('egon' in names)
- 合集 |
pythons={'egon','axx','ysb','wxx'} linuxs={'egon','oldboy','oldgirl','smallboy','smallgirl'} print(pythons|linuxs)
- &交集:同時報名兩門課程的學生
print(pythons & linuxs) print(pythons.intersection(linuxs))
-
print(pythons ^ linuxs) print(pythons.symmetric_difference(linuxs))
-
print(pythons - linuxs) print(pythons.difference(linuxs))
-
s1={1,2,3} s2={1,2,} print(s1 >= s2) print(s1.issuperset(s2)) print(s2.issubset(s1)) linuxs={'egon','oldboy','oldgirl','smallboy','smallgirl'} for student in linuxs: print(student)