String字符串,字典的遍歷,set,各個數據類型的轉換,迭代器

一、String字符串

1.分割和合並

1.1 str1.split(str2, num)

功能:以str2爲分割截取字符串,num默認爲str1.count(str2)

若給定num 後,則截取num個字符串,剩餘的不再進行截取。

str1 = "how are you , i am fine thank you"
#使用空格進行分割
list1 = str1.split(" ")
print(list1)
#結果
['how', 'are', 'you', ',', 'i', 'am', 'fine', 'thank', 'you']

1.2 str1.splitlines([keepends])

功能:字符串會按照行(’\r’,’\r\n’,’\n’)進行分割,返回一個包含各行作爲元素的列表,如果參數keepends的值爲False,不包含換行符,如果爲True,則保留換行符。

str2 = '''how are
you ?
i am
fine
!
'''

list2 = str2.splitlines()
print(list2)
#結果
['how are', 'you ?', 'i am', 'fine', '!']

str2 = '''how are
you ?
i am
fine
!
'''

list2 = str2.splitlines(keepends=True)
print(list2)
#結果
['how are\n', 'you ?\n', 'i am\n', 'fine\n', '!\n']

1.3 str1.join(seq)

功能:以指定字符串作爲分隔符,將seq中的所有元素合併成爲一個新的字符串

list2 = ['you', 'are', 'very', 'great', '!']
str3 = ' '.join(list2)
print(str3)
#結果
you are very great !

str1 = "how are you , i am fine thank you"
str3 = "*".join(str1)
print(str3)
#結果
h*o*w* *a*r*e* *y*o*u* *,* *i* *a*m* *f*i*n*e* *t*h*a*n*k* *y*o*u

注意:如果連接的是字符串,則它會把字符串中的每個字符使用指定字符連接。

2.獲取最大最小字符

2.1 max(str)

功能: 返回字符串str中最大的字母

str1 = "how are you , i am fine thank you"
print(max(str1))
#結果
y

2.2 min(str)

功能:返回字符串str中最小字母

str1 = "how are you , i am fine thank you"
print(min(str1))
#結果
‘ ’

注意:比較的是ASCII碼值

3.字符串的替換

3.1 replace(old , new [, count])

功能:將字符串中的old替換成new,若不指定count,則默認全部替換,若指定count,則替換前count個

str1 = "how are you , i am fine thank you"
str2 = str1.replace("you" ,'me')
print(str2)
#結果
how are me , i am fine thank me

3.2 字符串映射替換

參數一:要轉換的字符 參數二:目標字符

dic = str.maketrans(oldstr, newstr)

str2.translate(dic)

str5 = "aaa bbb  ccc  deee"
dic = str5.maketrans("ac", "21")
# a--2   c--1
str7 = "how  are you  ,u ewe "
print(str7.translate(dic))
#結果
how  2re you  ,u ewe 
#注意:很少用

4.判斷字符串的開頭結尾

str.startswith(str1, start=0, end=len(str))

功能:在給定的範圍內判斷字符串是否以給定的字符串開頭,如果沒有指定範圍,默認整個字符串

str1 = "aaa bbb  ccc  deee"
print(str1.startswith("aa"))
#結果
True


str1 = "aaa bbb  ccc  deee"
print(str1.startswith("aa", 3, 9))
#結果
False

str.endswith(str, start=0, end=len(str))

功能:在給定的範圍內判斷字符串是否以指定的字符串結尾,若沒有指定範圍,默認爲整個字符串

str1 = "aaa bbb  ccc  deee"
print(str1.endswith("e"))
#結果
True

str1 = "aaa bbb  ccc  deee"
print(str1.endswith("e", 3 ,9))
#結果
False

5.編碼與解碼

str.encode(encoding=“utf-8”, errors=“scrict”)

功能:字符串的編碼,若不指定encoding則默認選擇utf-8

str1 = "你好嗎?"
data = str1.encode()
print(data)
print(type(data))
#結果
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x90\x97\xef\xbc\x9f'
<class 'bytes'>

str.decode(encoding=“utf-8”)

“hello”.encode(“utf-8”).decode()

功能:對字符進行解碼,若不指定編碼格式,則默認選擇utf-8

str1 = "你好嗎?"
data = str1.encode()
print(data)
print(type(data))

data2 = data.decode()
print(data2)
print(type(data2))

#結果
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x90\x97\xef\xbc\x9f'
<class 'bytes'>
你好嗎?
<class 'str'>

注意:解碼時的編碼格式要與編碼時的保持一致

拓展:errors = ignore 的時候,忽略錯誤

6.判斷是否爲字母或數字

str.isalpha()

功能:判斷字符串至少有一個字符,並且所有的字符都是字母,若爲真則返回True,否則返回False

注意:中文沒有考慮在內

str8 = "hello ni hao "
print(str8.isalpha())
#結果
False
str9 = "hellonahao"
print(str9.isalpha())
#結果
True

str.isalnum()

功能:判斷一個字符串至少有一個字符,並且所有的字符都是字母或數字則返回True否則返回False

注意:中文不考慮在內

str10 = "sc22xdcd"
print(str9.isalnum())
print(str10.isalpha())
#結果
True
False

7.判斷大小寫

str.isupper()

功能:若字符串中包含至少一個字母的字符,並且這些字母都是大寫,則返回True,否則返回False

str10 = "AA2221  111"
print(str10.isupper())
#結果
True

str10 = "AAaaa"
print(str10.isupper())
#結果
False

str.islower()

功能:若字符串中包含至少一個字母的字符,並且這所有的字母都是小寫,則返回True,否則返回False

str10 = "aa2221  111"
print(str10.islower())
#結果
True

8.判斷是否包含特殊字符

8.1 str.istitle()

功能:如果一個字符串是標題化的則返回True,否則返回False

【標題化】每個首字母大寫

str1 = "Hello World"
print(str1.istitle())

8.2 str.isdigit()

isdigit()
True: Unicode數字,byte數字(單字節),全角數字(雙字節),羅馬數字
False: 漢字數字
Error: 無

print("123".isdigit())
print("123a".isdigit())
#結果
True
False

同上

str.isnumeric()

功能:若字符串中只包含數字字符,則返回True,否則返回False

isnumeric()
True: Unicode數字,全角數字(雙字節),羅馬數字,漢字數字
False: 無
Error: byte數字(單字節)

8.3 str.isdecimal()

功能:檢查字符串是否只包含十進制字符,如果是返回True,否則返回False

isdecimal()
True: Unicode數字,,全角數字(雙字節)
False: 羅馬數字,漢字數字
Error: byte數字(單字節)

print("123".isdecimal())
print("123z".isdecimal())
#結果
True
False

num = "1"  #unicode
num.isdigit()   # True
num.isdecimal() # True
num.isnumeric() # True

num = "1" # 全角
num.isdigit()   # True
num.isdecimal() # True
num.isnumeric() # True

num = b"1" # byte
num.isdigit()   # True
num.isdecimal() # AttributeError 'bytes' object has no attribute 'isdecimal'
num.isnumeric() # AttributeError 'bytes' object has no attribute 'isnumeric'

num = "IV" # 羅馬數字
num.isdigit()   # True
num.isdecimal() # False
num.isnumeric() # True

num = "四" # 漢字
num.isdigit()   # False
num.isdecimal() # False
num.isnumeric() # True

8.4 str.isspace()

功能:如果字符串只包含空格,則返回True,否則返回False

print(" ".isspace())
print("\t".isspace())
print("\n".isspace())
print("\r".isspace())
print("  qq".isspace())

#結果
True
True
True
True
False

9.ASCII碼轉換

9.1 ord(str)

功能:獲取字符串的整數表示 ASCII碼值

print(ord("A"))
print(ord("你"))
#結果
65
20320

9.2 chr(str)

把編碼轉成對應的字符

print(chr(68))
print(chr(20190))
#結果
D
仞

二、dict字典

1.概述

dict也是一種存儲方式,類似於list和tuple,但是,字典採用鍵—值(key—value)的形式存儲

優點:具有極快的查找速度

2.key的特性

1.字典中的key必須唯一

2.key必須是不可變對象

例如:字符串、整數等都是不可變的,可以作爲key

list是可變的,不能作爲key

思考:保存一個班級中的童鞋的成績

思路1:使用list或者tuple,但是容易發生錯亂對不上號

思路2:使用二維list或者tuple,但是會比較慢

思路3:可以採用字典,將學生的學號或者名字作爲key,成績爲value進行存儲,方便查找

3.字典的創建

語法:

字典名 = {鍵1:值1,鍵2:值2,…}

dist1 = {'tom':90,'lili':78, 'lele':92}
print(dist1)

4.字典操作

4.1訪問元素

語法:元素 = 字典名[key]

dist1 = {'tom':90,'lili':78, 'lele':92}
print(dist1['tom'])

注意:在key不存在的情況下,會報錯

語法: 元素 = 字典.get(key)

功能:使用get的方法獲取值,若key存在,則返回value的值,若key不存在則返回None

dist1 = {'tom':90,'lili':78, 'lele':92}
value = dist1.get('tom')
print(value)

4.2 添加元素

語法:字典名[key] = value

dist1 = {'tom':90,'lili':78, 'lele':92}
dist1['lisi'] = 89
print(dist1)

注意:一個key只能對應一個value,多次對一個key的value賦值,後面的值會把前面的值覆蓋掉。

4.3 刪除元素

語法:字典名.pop(key)

dist1 = {'tom':90,'lili':78, 'lele':92}
dist1.pop('tom')
print(dist1)

5.字典的遍歷

5.1 使用for循環遍歷

語法:

獲取鍵

for key in dist:

print(key)

獲取值

for value in dist.values() :

print(value)

同時獲取鍵和值

for k, v in dist.items() :

print(k, v)

注意:字典是無序的,在內存中存儲是無序的,因此無法通過下標來獲取值

dist1 = {'tom':90,'lili':78, 'lele':92}
#獲取字典的key
for key in dist1:
	print(key)
#獲取字典中的value	
for value  in dist1.values():
	print(value)
#同時獲取字典中的key與value
for k, v  in dist1.items():
	print(k, v)

6.與list的區別

1.dict的查找和插入的速度極快,不會隨着key-value的增加而變慢,但是list在查找的時候需要從頭向後挨個遍歷元素,並且當數據量增大的時候,速度也會隨着變慢

2.dict需要佔用大量的內存,內存浪費多,而list只相當於存儲了字典的key或者value部分,並且數據時緊密排列的。

三、set集合

1.概述

set與dict類似,也是一組key的集合,但與dict的區別在於set不存儲value

本質:無序且無重複元素的集合

只存儲了字典的key,沒有存儲字典的value

2.set的創建

語法:

set1 = set([1, 2, 3, 4, 5])

注意:創建set需要一個list或者tuple或者dist作爲輸入集合,重複的元素在set中會被自動的過濾

s1 = set([1, 2, 3, 4, 5])
print(s1)

3.set操作

3.1 set.add()

注意:

1.可以添加重複的元素,但是不會有效果

2.add 的元素不能是列表或者字典,因爲他們是可變的

s1 = set([1, 2, 3, 4, 5])
s1.add(6)
s1.add((2, 3, 4))
print(s1)
#結果
{1, 2, 3, 4, 5, 6, (2, 3, 4)}

3.2 set.update()

功能:插入整個list、tuple、字符串打碎插入

注意:不能直接插入數字

s1 = set([1, 2, 3, 4, 5])
s1.update([4,"anam","hha"])
s1.update("hello")
print(s1)
#結果
{1, 2, 3, 4, 5, 'anam', 'l', 'o', 'h', 'e', 'hha'}

3.3 set.remove(元素)

功能:刪除元素

s1 = set([1, 2, 3, 4, 5])
s1.remove(3)
print(s1)

3.4 遍歷元素

語法:

for i in set :

print(i)

注意:set是無序的,因此不能通過下標獲取元素

for index, data in enumerate(set):

print(index, data)

可以通過這種方式,來強行添加下標

s1 = set([1, 2, 3, 4, 5])
for i in s1:
	print(i)

for index,data in enumerate(s1):
	print(index, data)

3.5 交集與並集

語法:

交集 newest = set1 & set2

並集 newest = set1 | set2

s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7])
s3 = s1 & s2
s4 = s1 | s2
print(s3)
print(s4)
#結果
{4, 5}
{1, 2, 3, 4, 5, 6, 7}

四、類型轉換

主要針對幾種存儲工具:list、tuple、dict、set

特殊之處:dict是用來存儲鍵值對的

4.1 list 轉換爲set

l1 = [1, 2, 4, 5]
s1 = set(l1)
print(type(s1))
print(s1)

4.2 tuple 轉換爲set

t1 = (1, 2, 3, 4)
s1 = set(t1)
print(type(s1))
print(s1)

4.3 set轉換爲list

s1 = set([1, 2, 3, 4])
l1 = list(s1)
print(type(l1))
print(l1)

4.4 set轉換爲tuple

s1 = set([1, 2, 3, 4])
t1 = tuple(s1)
print(type(t1))
print(t1)

五、迭代器

列表生成式

語法:

list = [result for x in range(m, n)]

需求:創建一個[1, 2, …100]的列表

>>> range(1, 101)
[1, 2, 3, 4, 5,...,100]

需求2 :生成一個[1x1, 2x2, 3x3,….100x100]的列表

>>> list1 = []
>>> for x in range(1, 101)
		list1.append(x*x)
>>> list1
[1, 4, 9,....10000]

#使用列表生成式,可以這麼來寫
>>> list2 = [x*x for x in range(1, 101)]

三目運算符

xx if 判斷語句 else xxxx

本質:就是把for循環強制性的寫在一行,而輸出的結果寫在最前面,把結果使用[]括起來

5.1 可迭代對象

1.可以直接直接作用於for循環的對象統稱爲可迭代對象,我們稱之爲:Iterator

2.我們可以使用isintance()判斷一個對象是否是Iterator對象

3.可以直接作用於for循環的數據類型有以下幾種

a.集合數據類型:如list、tuple、dict、set和string

b.生成器(generator):就是一個能返回迭代器的函數,其實就是定義一個迭代算法,可以理解爲一個特殊的迭代器。

生成器:

通過列表生成式,我們可以直接創建一個列表,但是,受到內存限制,列表容量肯定是有限的,如果我們僅僅需要訪問前面幾個元素,如果列表元素可以按照某種算法推算出來,那我們是否可以在循環的過程中不斷推算出後續的元素呢?這樣就不必創建完整的list,從而節省大量的空間。在Python中,這種一邊循環一邊計算的機制,稱爲生成器(Generator)

#要創建一個generator,有很多種方法。第一種方法很簡單,只要把一個列表生成式的[]改成(),就創建了一個generator
>>> g = (x for x in range(1, 101))
>>> g
<generator object <genexpr> at 0x10124df68>
>>> g.__next__()
1
>>> [x for x in g]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

注意:使用Iterator判斷的時候需要導入Iterable的包

from collections import Iterable

print(isinstance([],Iterable))
print(isinstance((),Iterable))
print(isinstance({},Iterable))
print(isinstance("",Iterable))
print(isinstance((x for x in range(10)),Iterable))
print(isinstance(1,Iterable))
#結果
True
True
True
True
True
False

5.2 迭代器

迭代器:不但可以作用於for循環,還可以被next()函數不斷調用並返回下一個值,直到最後出現StopIteration錯誤,表示無法返回下一個值

可以被next()函數調用並不斷返回下一個值得對象成爲迭代器(Iterator對象)

可以使用isinstance()函數判斷一個對象是否是Iterator對象

print(isinstance([],Iterator))
print(isinstance((),Iterator))
print(isinstance({},Iterator))
print(isinstance("",Iterator))
# 只有這個是迭代器
print(isinstance((x for x in range(10)),Iterator))

#結果
False
False
False
False
True

5.3 Iterator轉換

可以通過Iter()函數將list、tuple、dict、string轉換爲Iterator對象

>>> a = iter([1, 2, 3, 4, 5])
>>> print(next(a))
1

print(isinstance(iter([]), Iterator))
print(isinstance(iter(()), Iterator))
print(isinstance(iter({}), Iterator))
print(isinstance(iter(''), Iterator))
#結果
True
True
True
True

六、練習

2.輸入一個時間,獲取這個時間的下一秒

3.歌詞解析器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章