字串、列表、元組、字典

字串、列表、元組、字典

字串介紹
<1>python中字串的格式

雙引號或者單引號中的資料,就是字串

<2>字串中”下標”的使用
列表與元組支援下標索引好理解,字串實際上就是字元的陣列,所以也支援下標索引。
如果想取出部分字元,那麼可以通過下標的方法,(注意python中下標從 0 開始)

 name = 'abcdef'
print(name[0])
print(name[1])
print(name[2])

<3>切片
切片是指對操作的物件擷取其中一部分的操作。字串、列表、元組都支援切片操作。
切片的語法:[起始:結束:步長]
注意:選取的區間屬於左閉右開型,即從”起始”位開始,到”結束”位的前一位結束(不包含結束位本身)。

我們以字串為例講解。如果取出一部分,則可以在中括號[]中,使用:

 name = 'abcdef' #定義一個字串
name[0:3]<=>name[:3] #取下標0~2的字元;0可以省略 
name[2:] #取下標為2開始到最後的字元
name[1:-1] #取下標為1開始到最後第2個之間的字元
name[::2] #ace 步長2
name[::-2] #fdb -2表示逆序並且步長為2

反轉字串

 name = 'abcdef' #定義一個字串
name[::-1] #fedcba

字串常見操作 其餘不常用字串操作這裡不再介紹
如有字串mystr = ‘hello world itcast and itcastcpp’,以下是常見的操作
<1>find
檢測 str 是否包含在 mystr中,如果是返回開始的索引值,否則返回-1

mystr.find(str, start=0, end=len(mystr)) 

<2>index
跟find()方法一樣,只不過如果str不在 mystr中會報一個異常.

mystr.index(str, start=0, end=len(mystr))   

<3>count
返回 str在start和end之間 在 mystr裡面出現的次數

mystr.count(str, start=0, end=len(mystr))

<4>replace
把 mystr 中的 str1 替換成 str2,如果 count 指定,則替換不超過 count 次.

mystr.replace(str1, str2,  mystr.count(str1)) 

<5>split
以 str 為分隔符切片 mystr,如果 maxsplit有指定值,則僅分隔 maxsplit 個子字串

mystr.split(str=" ", 2)    

<6>capitalize
把字串的第一個字元大寫

mystr.capitalize() 

<7>title
把字串的每個單詞首字母大寫

>>> a = "hello itcast"
>>> a.title()
'Hello Itcast'

<8>startswith
檢查字串是否是以 obj 開頭, 是則返回 True,否則返回 False

mystr.startswith(obj)   

<9>endswith
檢查字串是否以obj結束,如果是返回True,否則返回 False.

mystr.endswith(obj)    

<10>lower
轉換 mystr 中所有大寫字元為小寫

mystr.lower()  

<11>upper
轉換 mystr 中的小寫字母為大寫

mystr.upper()       

列表介紹
<1>列表的格式
變數namesList的型別為列表,比C語言的陣列強大的地方在於列表中的元素可以是不同型別的

namesList = ['xiaoWang','xiaoZhang','xiaoHua',123]

<2>列印列表

namesList = ['xiaoWang','xiaoZhang','xiaoHua']
print(namesList[0])
print(namesList[1])

<3>列表的迴圈遍歷
1. 使用for迴圈(首選)

namesList = ['xiaoWang','xiaoZhang','xiaoHua']
for name in namesList:
print(name)

2. 使用while迴圈

namesList = ['xiaoWang','xiaoZhang','xiaoHua']
length = len(namesList)
i = 0
while i<length:
print(namesList[i])
i =1

實現帶下標索引的遍歷

   >>> chars = ['a', 'b', 'c', 'd']
>>> i = 0
>>> for chr in chars:
print("%d %s"%(i, chr))
i  = 1

enumerate()

>>> chars = ['a', 'b', 'c', 'd']
>>> for i, chr in enumerate(chars):
print i, chr

<4>列表的相關操作
列表中存放的資料是可以進行修改的,比如”增”、”刪”、”改”、”查”
<1>新增元素(“增”append, extend, insert)
通過append可以向列表新增元素

#定義列表A,有3個元素
A = ['xiaoWang','xiaoZhang','xiaoHua']
for tempName in A:
print(tempName)
temp = input('請輸入要新增的學生姓名:')
A.append(temp)
for tempName in A:
print(tempName)

通過extend可以將另一個集合中的元素逐一新增到列表中

>>> a = [1, 2]
>>> b = [3, 4]
>>> a.append(b)
>>> a
[1, 2, [3, 4]]
>>> a.extend(b)
>>> a
[1, 2, [3, 4], 3, 4]

insert(index, object) 在指定位置index前插入元素object

>>> a = [0, 1, 2]
>>> a.insert(1, 3)
>>> a
[0, 3, 1, 2]

<2>修改元素(“改”)
修改元素的時候,要通過下標來確定要修改的是哪個元素,然後才能進行修改

#定義列表A,有3個元素
A = ['xiaoWang','xiaoZhang','xiaoHua']
for tempName in A:
print(tempName)
#修改元素
A[1] = 'xiaoLu'
for tempName in A:
print(tempName)

<3>查詢元素(“查”in, not in, index, count)
所謂的查詢,就是看看指定的元素是否存在。python中查詢的常用方法為:
in(存在),如果存在那麼結果為true,否則為false
not in(不存在),如果不存在那麼結果為true,否則false

#待查詢的列表
nameList = ['xiaoWang','xiaoZhang','xiaoHua']
#獲取使用者要查詢的名字
findName = input('請輸入要查詢的姓名:')
#查詢是否存在
if findName in nameList:
print('在字典中找到了相同的名字')
else:
print('沒有找到')

index和count與字串中的用法相同

>>> a = ['a', 'b', 'c', 'a', 'b']
>>> a.index('a', 1, 3) # 注意是左閉右開區間
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'a' is not in list
>>> a.index('a', 1, 4)
3
>>> a.count('b')
2
>>> a.count('d')
0

<4>刪除元素(“刪”del, pop, remove)
類比現實生活中,如果某位同學調班了,那麼就應該把這個條走後的學生的姓名刪除掉;在開發中經常會用到刪除這種功能。列表元素的常用刪除方法有:

del:根據下標進行刪除
pop:刪除最後一個元素
remove:根據元素的值進行刪除

demo:(del)

movieName = ['加勒比海盜','駭客帝國','第一滴血','指環王','霍位元人','速度與激情']
for tempName in movieName:
print(tempName)
del movieName[2]
for tempName in movieName:
print(tempName)

demo:(pop)

movieName = ['加勒比海盜','駭客帝國','第一滴血','指環王','霍位元人','速度與激情']
for tempName in movieName:
print(tempName)
movieName.pop()
for tempName in movieName:
print(tempName)

demo:(remove)

movieName = ['加勒比海盜','駭客帝國','第一滴血','指環王','霍位元人','速度與激情']
for tempName in movieName:
print(tempName)
movieName.remove('指環王')
for tempName in movieName:
print(tempName)

<5>排序(sort, reverse)
sort方法是將list按特定順序重新排列,預設為由小到大,引數reverse=True可改為倒序,由大到小。reverse方法是將list逆置。

>>> a = [1, 4, 2, 3]
>>> a
[1, 4, 2, 3]
>>> a.reverse()
>>> a
[3, 2, 4, 1]
>>> a.sort()
>>> a
[1, 2, 3, 4]
>>> a.sort(reverse=True)
>>> a
[4, 3, 2, 1]

列表的巢狀
1. 列表巢狀
一個列表中的元素又是一個列表,那麼這就是列表的巢狀

schoolNames = [['北京大學','清華大學'],
['南開大學','天津大學','天津師範大學'],
['山東大學','中國海洋大學']]

2. 應用
一個學校,有3個辦公室,現在有8位老師等待工位的分配,請編寫程式,完成隨機的分配

#encoding=utf-8
import random
# 定義一個列表用來儲存3個辦公室
offices = [[],[],[]]
# 定義一個列表用來儲存8位老師的名字
names = ['A','B','C','D','E','F','G','H']
i = 0
for name in names:
index = random.randint(0,2)    
offices[index].append(name)
i = 1
for tempNames in offices:
print('辦公室%d的人數為:%d'%(i,len(tempNames)))
i =1
for name in tempNames:
print("%s"%name,end='')
print("")      

元組
Python的元組與列表類似,不同之處在於元組的元素不能修改。元組使用小括號,列表使用方括號。

>>> aTuple = ('et',77,99.9)
>>> aTuple
('et',77,99.9)

<1>訪問元組
這裡寫圖片描述

<2>修改元組
這裡寫圖片描述

說明: python中不允許修改元組的資料,包括不能刪除其中的元素。

<3>元組的內建函式count, index
index和count與字串和列表中的用法相同

>>> a = ('a', 'b', 'c', 'a', 'b')
>>> a.index('a', 1, 3) # 注意是左閉右開區間
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: tuple.index(x): x not in tuple
>>> a.index('a', 1, 4)
3
>>> a.count('b')
2
>>> a.count('d')
0     

<3>元組的拆包

for temp in infor.items():
print("key=%s,value=%s"%(temp[0],temp[1]))
等價於:
for A、B ininfor.items():
print("key=%s,value=%s"%((A、B))

字典
<1>軟體開發中的字典
變數info為字典型別:

info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'}

說明:
字典和列表一樣,也能夠儲存多個資料
列表中找某個元素時,是根據下標進行的
字典中找某個元素時,是根據’名字’(就是冒號:前面的那個值,例如上面程式碼中的’name’、’id’、’sex’)
字典的每個元素由2部分組成,鍵:值。例如 ‘name’:’班長’ ,’name’為鍵,’班長’為值

<2>根據鍵訪問值

info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'}
print(info['name'])
print(info['address'])

若訪問不存在的鍵,則會報錯:

>>> info['age']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'age'

在我們不確定字典中是否存在某個鍵而又想獲取其值時,可以使用get方法,還可以設定預設值:

>>> age = info.get('age')
>>> age #'age'鍵不存在,所以age為None
>>> type(age)
<type 'NoneType'>
>>> age = info.get('age', 18) # 若info中不存在'age'這個鍵,就返回預設值18
>>> age
18

字典的常見操作1

<1>修改元素
字典的每個元素中的資料是可以修改的,只要通過key找到,即可修改

info = {'name':'班長', 'id':100, 'sex':'f', 'address':'地球亞洲中國北京'}
newId = input('請輸入新的學號')
info['id'] = int(newId)
print('修改之後的id為%d:'%info['id'])     

<2>新增元素

info = {'name':'班長', 'sex':'f', 'address':'地球亞洲中國北京'}
print('id為:%d'%info['id'])

這裡寫圖片描述

如果在使用 變數名[‘鍵’] = 資料 時,這個“鍵”在字典中,不存在,那麼就會新增這個元素

info = {'name':'班長', 'sex':'f', 'address':'地球亞洲中國北京'}
# print('id為:%d'%info['id'])#程式會終端執行,因為訪問了不存在的鍵
newId = input('請輸入新的學號')
info['id'] = newId
print('新增之後的id為:%d'%info['id'])

結果:

   請輸入新的學號188
新增之後的id為: 188

<3>刪除元素
對字典進行刪除操作,有一下幾種:
del
clear()

demo:del刪除指定的元素

info = {'name':'班長', 'sex':'f', 'address':'地球亞洲中國北京'}
print('刪除前,%s'%info['name'])
del info['name']
print('刪除後,%s'%info['name'])

結果
訪問不存在的元素

demo:del刪除整個字典

info = {'name':'monitor', 'sex':'f', 'address':'China'}
print('刪除前,%s'%info)
del info
print('刪除後,%s'%info)

結果
訪問不存在的元素

demo:clear清空整個字典

info = {'name':'monitor', 'sex':'f', 'address':'China'}
print('清空前,%s'%info)
info.clear()
print('清空後,%s'%info)

結果
訪問不存在的元素

字典的常見操作2

<1>len() 測量字典中,鍵值對的個數
這裡寫圖片描述

<2>keys 返回一個包含字典所有KEY的列表
這裡寫圖片描述

<3>values 返回一個包含字典所有value的列表
這裡寫圖片描述

<4>items 返回一個包含所有(鍵,值)元祖的列表
這裡寫圖片描述

<5>has_key
dict.has_key(key)如果key在字典中,返回True,否則返回False
這裡寫圖片描述