python學(xué)習(xí)
dir()
這些方法不用全記,可以用dir查看所有的操作方法
print(dir(''))
#['__add__', '__class__', '__contains__', '__delattr__', '__dir__', ............
print(dir([]))
#['__add__', '__class__', '__contains__', '__delattr__'...........
字符串的操作
字符串是不可變的,操作實際上是創(chuàng)建新的字符串并引用
.replace()
用給定字符串替換字符串中的部分字符.find()
查找.如果包含子字符串返回開始的索引值,否則返回-1。.Index()
查找.如果指定 beg(開始) 和 end(結(jié)束) 范圍,則檢查是否包含在指定范圍內(nèi),該方法與 python find()方法一樣,只不過如果str不在 string中會報一個異常。.count(x, __start, __end)
查找出現(xiàn)的次數(shù)
print("hello world".count('o'))
#2
print("hello world".count('o',2,6))
#1
- .split()
(字符串分割,切片) - .capitalize()
(字符串第一個字母大寫) - .title()
字符串每一個單詞首字母大寫(按空格來劃分單詞) - .startswith()
是否以給定字符開頭,返回布爾值 - .endswith()
是否以給定字符串結(jié)尾,(返回布爾值) - .upper()
把字符串所有變?yōu)榇髮?/li> - .lower()
把字符串所有變?yōu)樾?/li> - .rjust(width,fillchar)
返回一個字符串右對齊,長度變?yōu)閣idth,并用fillchar(默認(rèn)為空格)填充.fillchar必須是一個字符,否則會報錯:TypeError: The fill character must be exactly one character long
name='hello world'
print(name.rjust(31,'o'))
print(name.rjust(31,'oo'))
#輸出結(jié)果為
#oooooooooooooooooooohello world
#error
.ljust()
字符串左對齊,長度變?yōu)閣idth,并用fillchar(默認(rèn)為空格)填充.fillchar必須是一個字符,否則會報錯:TypeError: The fill character must be exactly one character long.center()
字符串居中,長度為width,用fillchar填充.
print('hello world'.center(31,'o'))
#輸出:oooooooooohello worldoooooooooo
- .lstrip(chars)
清楚字符串左邊的chars(默認(rèn)為空格)
print('oooooooohello o'.lstrip('o'))
#輸出:hello o
- .rstrip(chars)
清楚字符串右邊的chars(默認(rèn)為空格) - .strip(chars)
清楚字符串兩端的chars(默認(rèn)為空格)
print(' hello '.lstrip())
#輸出:hello
- .rfind()
- .lfind()
- .rindex()
- .lindex()
- .partition(sep)
從左邊第一個sep,把字符串分割為三部分,返回元組.(sep前,sep,sep后)
print(' hello world ooo'.partition('o'))
#輸出:(' hell', 'o', ' world ooo')
- .rpartition()
從右邊第一個sep,把字符串分割為三部分,返回元組.(sep前,sep,sep后)
print(' hello world ooo'.rpartition('o'))
#輸出:(' hello world oo', 'o', '')
- .splitlines()
按照行分割,返回一個包含各行作為元素的列表.
print(' hello wor\nld \nooo'.splitlines())
#輸出:[' hello wor', 'ld ', 'ooo']
- .isalpha()
判斷字符串是否都是由字符組成的(空格,數(shù)字,轉(zhuǎn)義字符都不行)返回布爾值.
print('hellow\norlooo'.isalpha())
print('hellow orlooo'.isalpha())
print('hellow2orlooo'.isalpha())
#輸出:False
#False
#False
- .isdigit()
判斷是否只是數(shù)字
print('156156'.isdigit())
#True
- .isalnum()
判斷是否只由數(shù)字或字母組成
print('hel low2orlooo'.isalnum())
#False
print('hellow2orlooo'.isalnum())
#True
- .isspace()
判斷是否只由空格組成
print(' '.isspace())
#True
- .join()
鏈接為字符串.可以用給定字符分割.
list=['my','name','is','xtf']
print('/'.join(list))
#my/name/is/XTF
print(' '.join(list))
#my name is XTF
其他tips
- "'\t"是tab的轉(zhuǎn)義字符,是四個空格
List 列表 增,刪,改,查
列表可以儲存不同類型的數(shù)據(jù)
- 列表訪問不能越界,不論是正向還是反向
list=['a','b',2]
print(list[2])
#2
list=['a','b',2]
print(list[5])
#IndexError: list index out of range
list=['a','b',2]
print(list[-1])
#2
list=['a','b',2]
print(list[-5])
#IndexError: list index out of range
增
- .append()
在列表后插入 - .insert(index,object)
在指定位置index前入元素object
list=['a','b',2]
list.insert(2,10)
print(list)
#['a', 'b', 10, 2]
- extend(interale)
list=['a','b',2]
list2=['c','d']
print(list)
list.extend(list2)
print(list)
#['a', 'b', 10, 2]
#'a', 'b', 10, 2, 'c', 'd']
改
- 直接修改
list=['a','b',2]
list[2]='c'
print(list)
#['a', 'b', 'c']
查
- in 和 not in
查找是否存在列表里,返回布爾值
list=['a','b',2]
print('c' in list)
#False
print('c' not in list)
#True
- .index(object, start, stop)
查找object,并返回第一個object的位置.區(qū)域為start 到 stop,左閉右開.
list=['a','b',2]
print(list.index(2,0,2))
#ValueError: '2' is not in list
list=['a','b',2]
print(list.index(2,0,3))
#2
刪
- del
根據(jù)下標(biāo)進(jìn)行刪除
list=['a','b',2]
del list[2]
print(list)
#['a', 'b']
- .pop()
刪除最后一個元素
list=['a','b',2]
print(type(list.pop()))
print(list.pop())
print(list)
#<class 'int'>
#b
#['a']
- .remove()
根據(jù)元素的值進(jìn)行刪除
list=['a','b',2]
list.remove('b')
print(list)
#['a', 2]
隨機數(shù)
- randint() 左閉右閉的
隨機整數(shù)
from random import randint
num=randint(-10,10)
print(num)
- 增強可讀性
for 循環(huán)中的變量用 _ 來寫,表示在循環(huán)中沒有用到這個變量.
num_list=[]
for _ in range(10):
num_list.append(randint(1,20))
print(num_list)
- .sort()
對原列表進(jìn)行排序
num_list=[]
for _ in range(10):
num_list.append(randint(1,20))
num_list.sort()
print(num_list)
num_list.sort(reverse=True)
print(num_list)
#[1, 1, 3, 6, 9, 11, 11, 13, 14, 17]
#[17, 14, 13, 11, 11, 9, 6, 3, 1, 1]
- sorted()
排序
和.sort()的區(qū)別:- 返回新的列表,原來的沒有改變.
- .sort()屬于列表的的內(nèi)置函數(shù),而sorted()可以對所有可迭代對象進(jìn)行排序
- .sort()是方法,sorted()不是
num_list=[]
for _ in range(10):
num_list.append(randint(1,20))
print(sorted(num_list))
#[4, 6, 6, 9, 12, 13, 14, 16, 20, 20]
- 列表的嵌套(二維數(shù)組)
list=[['a','b'],['c','d']]
print(list)
print(list[0])
print(list[0][0])
#[['a', 'b'], ['c', 'd']]
#['a', 'b']
#a
#print(list[0,1]) 不能這樣寫,numpy才這樣寫
- 列表推導(dǎo)式 重要
所謂的列表推導(dǎo)式,就是指輕量級的循環(huán)創(chuàng)建列表.列表推導(dǎo)式效率高.
list1=[]
for i in range(10):
list1.append(i)
print(list1)
#列表推導(dǎo)式
list2=[i for i in range(10)]
print(list2)
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
生成相同的內(nèi)容
list1=[]
for _ in range(3):
list1.append('不給魯班我就送')
print(list1)
#列表推導(dǎo)式
list2=['不給魯班我就送' for _ in range(3)]
print(list2)
#['不給魯班我就送', '不給魯班我就送', '不給魯班我就送']
#['不給魯班我就送', '不給魯班我就送', '不給魯班我就送']
列表推導(dǎo)式解析:
from random import randint
list=[randint(-10,10) for _ in range(10)]
print(list)
#選出大于0的數(shù)據(jù)
res=[]
for x in list:
if x>=0:
res.append(x)
print("用for循環(huán)篩選>=0:",res)
print('使用列表解析篩選:',[x for x in list if x>=0])
#用for循環(huán)篩選>=0: [3, 8, 4, 5, 0]
#使用列表解析篩選: [3, 8, 4, 5, 0]
number=[i for i in range(11)]
print(number)
print([x for x in number if x%2==0])
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#[0, 2, 4, 6, 8, 10]
- 列表轉(zhuǎn)化為字符串
my_list=['Welcom','to','ML','World']
print(' '.join(my_list))
print('/'.join(my_list))
#Welcom to ML World
#Welcom/to/ML/World
- 列表的乘法
獲得一個列表,里面內(nèi)容重復(fù)
list=['a','b','c',1,2,3]
print(list*3)
#['a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c', 1, 2, 3]
元組 tuple
不能修改,不能刪除
- .index()
查找給定元素,返回下標(biāo)值
a=(1,2,3,4,5)
print(a.index(3))
#2
- .count()
返回出現(xiàn)的次數(shù)
a=(1,2,3,4,5)
print(a.count(3))
#1
- 單個元素的元組是(222111,)
(2221122)不是元組,是數(shù)字
print(type((121222)),type((21212121,)))
#<class 'int'> <class 'tuple'>
- 改變元組
元組里邊如果有l(wèi)ist,實際上存的是list的地址,這個地址是沒法改變的,但是list內(nèi)容可以改變
a=(1,[2,3],9,0)
print(a)
a[1].append(4)
print(a)
#(1, [2, 3], 9, 0)
#(1, [2, 3, 4], 9, 0)
- zip()
將可迭代對象作為參數(shù),將對象中對應(yīng)的元素一一對應(yīng),轉(zhuǎn)化為一些元組,然后返回這些元組對象的內(nèi)存位置,如要顯示可用list()轉(zhuǎn)化.如果長度不一致,則長度與最短的相同
a=(1,2,3,4,5)
b=('a','b','c')
print(list(zip(a,b)))
#[(1, 'a'), (2, 'b'), (3, 'c')]
a=[1,2,3,4,5]
b=['a','b','c']
print(list(zip(a,b)))
#[(1, 'a'), (2, 'b'), (3, 'c')]
- 同時迭代多個對象
a=[1,2,3]
b=[1,2,3]
c=[1,2,3]
for i,j,k in a,b,c:
print(i+j+k)
#6
#6
#6
a=[1,2,3,4]
b=[1,2,3]
c=[1,2,3]
for i,j,k in a,b,c:
print(i+j+k)
#ValueError: too many values to unpack (expected 3)
字典
*** key和value的鍵值對***
- 獲取key對應(yīng)的值
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
print(info["name"])
#劉強東
- .get()
當(dāng)不確定字典中是否存在某個key時,可以用.get().不存在的時候返回None或給定的默認(rèn)值.
不存在的話返回None
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
print(info.get("mail"))
#None
可以給定默認(rèn)值,若key不存在,返回默認(rèn)值
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
print(info.get("mail","jingdong.com"))
#jingdong.com
print(info.get("age",25))
#25
- 值的更改
直接賦值就可以
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
info['name']="馬云"
print(info["name"])
#馬云
- 添加
直接賦值就可以
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
info['sex']="male"
print(info,'\n',info["sex"])
#{'name': '劉強東', 'age': 45, 'id': 123456789, 'addr': '北京', 'sex': 'male'}
# male
- 刪除
- del
根據(jù)鍵值刪除
- del
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
del info["name"]
print(info)
#{'age': 45, 'id': 123456789, 'addr': '北京'}
- 清除
刪除整個字典
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
del info
print(info)
#NameError: name 'info' is not defined
- clear()
刪除字典內(nèi)部數(shù)據(jù),留下空字典
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
info.clear()
print(info)
#{}
clear此方法返回None
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
print(info.clear())
#None
- len()
字典的長度(鍵值對的個數(shù))
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
print(len(info))
#4
- .keys()
返回所有的key
返回的不是list,但可迭代,可用list()轉(zhuǎn)換
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
print(info.keys())
#dict_keys(['name', 'age', 'id', 'addr'])
print(type(info.keys()))
#<class 'dict_keys'>
print((list(info.keys())))
#['name', 'age', 'id', 'addr']
- .values()
返回所有的value
返回的不是list,但可迭代,可用list()轉(zhuǎn)換
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
print(info.values())
#dict_values(['劉強東', 45, 123456789, '北京'])
- .items()
返回(key,value)
返回的不是list,但可迭代,可用list()轉(zhuǎn)換
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
print(info.items())
#dict_items([('name', '劉強東'), ('age', 45), ('id', 123456789), ('addr', '北京')])
- 遍歷整個字典
遍歷整個字典的key和value
info={'name': "劉強東",'age': 45,'id':123456789,'addr':'北京'}
for key,value in info.items():
print(key,"=====>",value)
#name =====> 劉強東
#age =====> 45
#id =====> 123456789
#addr =====> 北京
把字典轉(zhuǎn)化為list
轉(zhuǎn)化為list時會將key和value變?yōu)樵M,然后變?yōu)閘ist字典的解析
#創(chuàng)建一個班級的分?jǐn)?shù)
from random import randint
grades={'student{}'.format(i): randint(50,100) for i in range(1,5)}
print(grades)
#篩選出高于90分的人
d={k:v for k,v in grades.items() if v>=90}
print(d)
#{'student1': 56, 'student2': 60, 'student3': 97, 'student4': 73}
#{'student3': 97}
集合
無序,元素是唯一的
里面不能放list或set或dic等
顯示時為有序,實際為無序
常用于去重
- set 集合
set1={1,4,2,7,5,1}
print(type(set1))
#<class 'set'>
添加
- .add()
添加元素
set1={1,4,2,7,5}
set1.add(8)
print(set1)
#{1, 2, 4, 5, 7, 8}
刪除
- .remove()
刪除給定,不存在的話報錯
set1={1,4,2,7,5,1}
set1.remove(1)
print(set1)
#{2, 4, 5, 7}
- .pop()
隨機刪除元素,若集合為空,則報錯
set1={1,4,2,7,5,1}
set1.pop()
print(set1)
#{2, 4, 5, 7}
- .discard()
如果存在給定值,則刪除,若不存在,則不做任何操作.
set1={1,4,2,7,5,1}
set1.discard(2)
print(set1)
set1.discard(3)
print(set1)
#{1, 4, 5, 7}
#{1, 4, 5, 7}
- .update()
- 集合的解析
set1={randint(0,20) for _ in range(10)}
print(set1)
res={ x for x in set1 if x%3==0}
print(res)
函數(shù)
- 格式
def 函數(shù)名(參數(shù)):
pass
def sumNum(start,end):
res=0
for i in range(start,end+1):
res+=i
return res
res=sumNum(1,100)
print(res)
#5050
- 函數(shù)解釋
在定義函數(shù)后輸入三個引號,會自動生成參數(shù)和結(jié)果讓我來解釋.在后面用到函數(shù)的時候按ctrl并鼠標(biāo)放在函數(shù)上,會顯示函數(shù)的說明.
def sumNum(start,end):
"""
計算start到end的累加和
:param start: 開始值
:param end: 結(jié)束值
:return: 累加和
"""
res=0
for i in range(start,end+1):
res+=i
return res
res=sumNum(1,100)
print(res)

image.png
- doc 是函數(shù)的注釋
def ff(a):
"""
打印test
:param a: 隨意
:return: 5
"""
a=3
return 5
print(ff.__doc__)
# 打印test
# :param a: 隨意
# :return: 5