字符串
字符串是 Python 中最常用的數(shù)據(jù)類型炫欺。我們可以使用引號(hào)('或")來創(chuàng)建字符串。Python 不支持單字符類型熏兄,單字符也在Python也是作為一個(gè)字符串使用品洛。
字符串索引(下標(biāo))
所謂“下標(biāo)”,就是編號(hào)摩桶,就好比超市中的存儲(chǔ)柜的編號(hào)桥状,通過這個(gè)編號(hào)就能找到相應(yīng)的存儲(chǔ)空間!
python的字串列表有2種取值順序:
從左到右索引默認(rèn)0開始的,最大范圍是字符串長(zhǎng)度少1
從右到左索引默認(rèn)-1開始的典格,最大范圍是字符串開頭
如果你要實(shí)現(xiàn)從字符串中獲取一段子字符串的話岛宦,可以使用變量 [頭下標(biāo):尾下標(biāo)],就可以截取相應(yīng)的字符串耍缴,其中下標(biāo)是從 0 開始算起砾肺,可以是正數(shù)或負(fù)數(shù),下標(biāo)可以為空表示取到頭或尾防嗡。
例如:
str1 = 'hello world!'
print(str1[:5]
其結(jié)果為'hello'变汪,這就是通過下標(biāo)將字符串切片的方法。
注意:字符串使用下標(biāo)切片的時(shí)候入上面例子中是從str1這個(gè)字符串中取出0到5的字符蚁趁,但是不包括下標(biāo)為5的字符裙盾,因此在使用字符串進(jìn)行切片的時(shí)候應(yīng)注意切片的是一個(gè)半閉半開區(qū)間。
字符串常用方法
字符串的方法有很多詳細(xì)的參考Python3 字符串
通過以下代碼展示部分方法的使用:
str1 = 'hello, world!'
print(len(str1))
#返回字符串的長(zhǎng)度
print(str1.capitalize())
#將字符串的第一個(gè)字符轉(zhuǎn)換為大寫!
print(str1.upper())
#將字符串中所有小寫字母轉(zhuǎn)換為大寫
print(str1.lower())
#將字符串中所有字母轉(zhuǎn)化為小寫
print(str1.title())
#將字符串中所有的單詞首字母都大寫
print(max(str1))
#返回字符串中最大的字母(以ASCII碼表為參考)同理也有min()方法
print(str1.find('or'))
#從左到右進(jìn)行查找他嫡,找到了返回索引番官,找不到返回-1,從右往左查找使用rfind()方法
#print(str1.index("shit")) #z找不到就出現(xiàn)錯(cuò)誤钢属,找到了返回索引
print(str1.startswith("he"))
#檢查一個(gè)字符串是不是以he開頭的徘熔,同理也有endswith()方法,檢測(cè)以哪個(gè)字符串結(jié)尾
print(str1.center(50,'*'))
#指定長(zhǎng)度為50淆党,不夠用*填充酷师,str1居中對(duì)齊
str2 = ' asds ldjf '
print(str2.strip())
#跳過字符串兩端的空格,當(dāng)然也可以指定跳過的字符染乌,默認(rèn)為跳過空格
print(str2.split('d'))
#以字符串d對(duì)當(dāng)前字符串進(jìn)行切割山孔,切割后得到一個(gè)列表
print(str1[-1:-3:-1])
#表示反向從-1取到-3,后面的-1表示反向選取步長(zhǎng)為1,,類似range的用法,只有用負(fù)索引時(shí)才能給得到反向
print((str1[::-1]))
#實(shí)現(xiàn)字符串的反轉(zhuǎn)
列表
List(列表) 是 Python 中使用最頻繁的數(shù)據(jù)類型荷憋。
列表可以完成大多數(shù)集合類的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)台颠。它支持字符,數(shù)字勒庄,字符串甚至可以包含列表等(即嵌套)串前。
列表與字符串類似同樣的支持下標(biāo)索引的方式取出列表中的元素,絕大多數(shù)字符串支持的運(yùn)算方法在列表中也同樣適用锅铅。
列表中元素的增刪改和遍歷
- 列表中增加元素
當(dāng)需要生成一個(gè)有特定規(guī)律的列表時(shí)酪呻,可以使用列表生成式快速的生成一個(gè)列表:
list1 = [x * x for x in range(10)]
print('list1=',list1)
list1= [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
- 列表中元素更新
列表中的元素的更新可以直接使用索引對(duì)列表指定位置進(jìn)行修改:
list2 = ['hello', 'world', 2562, 1589]
print('更新前的list:',list2)
list2[1] = 'Python'
print('更新后的list:',list2)
更新前的list: ['hello', 'world', 2562, 1589]
更新后的list: ['hello', 'Python', 2562, 1589]
- 列表中元素的刪除
使用 del 語句來刪除列表的的元素,如下實(shí)例:
list3 = ['hello', 'world', 1997, 2000]
print ('刪除前的列表', list3)
del list3[2]
print ("刪除第三個(gè)元素后的列表 : ", list3)
刪除前的列表 ['hello', 'world', 1997, 2000]
刪除第三個(gè)元素后的列表 : ['hello', 'world', 2000]
- 列表中元素的遍歷
通過循環(huán)對(duì)列表的遍歷方式有很多中盐须,但是通常我們使用如下的方法玩荠,既能得到值也能得到索引:
list4 = ['hello', 'world', 'Python', 1997, 2000]
for index,value in enumerate(list4):
print(index, ':', value)
0 : hello
1 : world
2 : Python
3 : 1997
4 : 2000
列表中的常用方法和函數(shù):
我們通過如下的代碼來了解列表的函數(shù)和方法的使用:
f = [100, 200, 500]
# enumerate()枚舉的方式可以即返回list中的值,同時(shí)也可以返回其對(duì)于的索引值
for index, val in enumerate(f):
print(index, val)
f.append(123) #向列表最后追加元素123
f.insert(1, 300) #在列表索引為1的元素之后插入300
f.insert(-1, 121) # 在索引為-1的元素之前插入121
f.insert(100, 10) # 如果不存在索引100則在最后添加
f.remove(200) # 如果200不存在會(huì)報(bào)錯(cuò)贼邓,存在就刪除阶冈,可以使用判斷是否存在,然后在刪除塑径,eg:f.remove(5999) if 5999 in f
f.pop() # 默認(rèn)是移除最后一個(gè)女坑,可以移除指定索引的元素f.pop(i)
f.index(500, 2, 5) # 查找500在索引為2到5之間查找,如果找不到會(huì)報(bào)錯(cuò)统舀,找到了返回索引
# f.clear() #表示清空
f.reverse() # 表示將f這個(gè)列表反向匆骗,直接修改f
print(reversed(f))
f.sort() # 表示將f進(jìn)行排序劳景,默認(rèn)升序排列,可以使用reverse反向排序碉就,也可以指定排序關(guān)鍵字key盟广,直接修改f
sorted(f, reverse=True, key=len) # python內(nèi)置的排序函數(shù),返回值為一個(gè)排好序的新list,
# key=len瓮钥,key表示指定排序的方式
# 默認(rèn)是升序排列筋量,如果需要降序,可以通過reverse=True來實(shí)現(xiàn)
# python 中的函數(shù)幾乎都是沒有副作用的函數(shù)(調(diào)用函數(shù)后不會(huì)影響傳入的參數(shù))
print(reversed(f)) # 類似sorted()函數(shù),但是它返回的值不是list列表
print(sorted(f))
print(f)
元組
元組是另一個(gè)數(shù)據(jù)類型碉熄,元組類似于列表桨武,列表的切片方法在元組中依然適用,但是元組和列表也有兩個(gè)不同的地方:
創(chuàng)建元組使用的是(),而創(chuàng)建列表使用的是[]
列表中的元素可以進(jìn)行增刪改锈津,元組是不支持增刪改的呀酸,只能對(duì)整個(gè)元組進(jìn)行刪除
如下示例簡(jiǎn)單介紹如何創(chuàng)建元組和元組轉(zhuǎn)換為列表:
list1 = ['hello', 'python']
tuple1 = (1, 2, 3, 4) # 創(chuàng)建元組
print(tuple1)
tuple2 = tuple(list1) # 將列表轉(zhuǎn)換為元組
list2 = list(tuple1) #將元組轉(zhuǎn)換為列表
集合
在Python中set是基本數(shù)據(jù)類型的一種集合類型,它有可變集合(set())和不可變集合(frozenset)兩種一姿。創(chuàng)建集合set七咧、集合set添加、集合刪除叮叹、交集艾栋、并集、差集的操作都是非常實(shí)用的方法蛉顽。Python中的集合跟數(shù)學(xué)上的集合是一致的蝗砾,內(nèi)部的元素是無序不重復(fù)的。
- 創(chuàng)建集合
集合的創(chuàng)建很簡(jiǎn)單携冤,使用花括號(hào){}悼粮,在括號(hào)中指定參數(shù),多個(gè)參數(shù)用,隔開即可曾棕,在集合中set括號(hào)中需要的參數(shù)的數(shù)據(jù)類型有:序列(包括字符串扣猫、列表、元組)翘地,字典或者是另一個(gè)集合申尤,但是不能是數(shù)值類型,如int類型衙耕。
list1 = [8, 9, 7, 6, 8, 9, 7]
set1 = set(list1)
set2 = {1, 1, 2, 2, 3, 3}
print(set1)
print(set2)
{8, 9, 6, 7}
{1, 2, 3}
- 集合添加元素
python 集合的添加有兩種常用方法昧穿,分別是add和update。
set2 = {1, 1, 2, 2, 3, 3}
set2.add('5')
set2.update('Python')
print(set2)
{1, 2, 3, 't', '5', 'n', 'y', 'h', 'P', 'o'}
- 集合刪除元素
集合刪除操作方法:remove
set3 = {1, 2, 3, 't', '5', 'n', 'y', 'h', 'P', 'o'}
set3.remove('5')
print(set3)
{1, 2, 3, 't', 'n', 'y', 'h', 'P', 'o'}
集合的交集并集
通過如下代碼了解集合的計(jì)算交集和并集的用法:
set1 = {1, 1, 2, 2, 3, 3}
set2 = {1, 3, 5, 7, 9}
set3 = set2 & set1 # 計(jì)算交集
set3 = set1.intersection(set2) # 計(jì)算交集
print(set3)
set3 = set2 | set1 # 計(jì)算并集
set3 = set1.union(set2) # 計(jì)算并集
print(set3)
set3 = set1.difference(set2) # 計(jì)算差集
print(set3)
set3 = set2 ^ set1 # 計(jì)算對(duì)稱差
set3 = set1.symmetric_difference(set2) # 計(jì)算對(duì)稱差
print(set3)
print(set1.issubset(set2)) # 判斷set2是否是set1的子集
print(set1.issuperset(set2)) # 判斷set2是否是set1的父集
set1.discard(100) #如果集合中存在100橙喘,則刪除时鸵,不存在不報(bào)錯(cuò)
print(set1)
字典
字典是另一種可變?nèi)萜髂P停铱纱鎯?chǔ)任意類型對(duì)象厅瞎。
字典的每個(gè)鍵值(key=>value)對(duì)用冒號(hào)(:)分割饰潜,每個(gè)對(duì)之間用逗號(hào)(,)分割初坠,整個(gè)字典包括在花括號(hào)({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
鍵必須是唯一的,但值則不必囊拜。
值可以取任何數(shù)據(jù)類型某筐,但鍵必須是不可變的比搭,如字符串冠跷,數(shù)字或元組。!
訪問字典中的值
因?yàn)樽值渲墟I的唯一性身诺,所以訪問字典中的值的時(shí)候蜜托,只需要把相應(yīng)的鍵放入方括弧中即可訪問到鍵對(duì)應(yīng)的值,如下實(shí)例:
dict1 = {'name': '王大錘', 'age': 38, 'gender': 'True'}
print(dict1['name'])
王大錘
修改字典
向字典添加新內(nèi)容的方法是增加新的鍵/值對(duì)霉赡,修改已有鍵/值對(duì)的方法類似于修改列表中的元素橄务,如下實(shí)例:
dict1 = {'name': '王大錘', 'age': 38, 'gender': 'True'}
print(dict1)
dict1['school'] = '成都七中'
dict1['age'] = 18
print(dict1)
{'name': '王大錘', 'age': 38, 'gender': 'True'}
{'name': '王大錘', 'age': 18, 'gender': 'True', 'school': '成都七中'}
刪除字典元素
刪除字典中的元素有幾種,能刪單一的元素也能清空字典穴亏,清空只需一項(xiàng)操作蜂挪。
dict2 = {'Name': '王大錘', 'Age': 7, 'Class': 'First'}
del dict2['Name'] # 刪除鍵 'Name'
print (dict2)
#dict2.clear() # 清空字典
del dict2 # 刪除字典
{'Age': 7, 'Class': 'First'}
注意:當(dāng)使用del刪除字典、或者字典中的元素或者其他的列表的時(shí)候如果刪除的內(nèi)容不存在嗓化,都會(huì)報(bào)錯(cuò)棠涮。在刪除之前都應(yīng)該先判斷是否存在
列表中的常用的方法
Python字典包含了以下內(nèi)置方法:
練習(xí)1:文字跑馬燈
import os
import time
def main():
str1 = "客上天然居居然天上客,人過大佛寺寺佛大過人。"
while True:
os.system('cls')
str1 = str1[1:] + str1[0]
print(str1)
time.sleep(0.5)
if __name__ == '__main__':
main()
練習(xí)2:打印楊輝三角
# def striangle():
def main():
lines = int(input('請(qǐng)輸入楊輝三角的行數(shù):'))
total_triangle = [[0 for x in range(i)] for i in range(1, lines + 1)]
for i in range(1, lines + 1):
for x in range(i):
if x == 0 or x == (i - 1):
total_triangle[i - 1][x] = 1
print(total_triangle[i-1][x],end=' ')
x == i-1 and print()
else:
total_triangle[i - 1][x] = total_triangle[i - 2][x - 1] + total_triangle[i - 2][x]
print(total_triangle[i-1][x], end=' ')
if __name__ == '__main__':
main()
請(qǐng)輸入楊輝三角的行數(shù):7
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
練習(xí)3:約瑟夫環(huán)
"""
有30個(gè)人在海上遇險(xiǎn)刺覆,為了能讓一部分人活下來不得不將其中15個(gè)人扔到海里面去严肪,
有個(gè)人想了個(gè)辦法就是大家圍成一個(gè)圈,由某個(gè)人開始從1報(bào)數(shù)谦屑,報(bào)到9的人就扔到海里面驳糯,
他后面的人接著從1開始報(bào)數(shù),報(bào)到9的人繼續(xù)扔到海里面氢橙,直到扔掉15個(gè)人酝枢。
由于上帝的保佑,15個(gè)基督徒都幸免于難悍手,問這些人最開始是怎么站的帘睦,哪些位置是基督徒哪些位置是非基督徒。
"""
def main():
ring = [1] * 30
ring_index = [i for i in range(30)]
print('死掉的人的位置是:')
while ring.count(0) < 15:
for i in range(8):
ring_index.append(ring_index[0])
ring_index.remove(ring_index[0])
kill = ring_index[0]
print(ring_index[0] + 1, end=' ')
ring_index.remove(ring_index[0])
ring[kill] = 0
print()
for person in ring:
print('基' if person else '非', end='')
if __name__ == '__main__':
main()
死掉的人的位置是:
9 18 27 6 16 26 7 19 30 12 24 8 22 5 23
基基基基非非非非非基基非基基基非基非非基基非非非基非非基基非
總結(jié)
字符串谓苟、列表官脓、元組、集合涝焙、字典這些東西有很多的相似之處也有很多不同之處卑笨,比如字符串和列表,元組都支持索引仑撞,字符串是和元組不能更改里面的內(nèi)容赤兴,而列表卻可以修改里面的內(nèi)容妖滔。知識(shí)點(diǎn)很多,但是找到相似之處和不同之處掌握這些知識(shí)點(diǎn)還是很容易的桶良,但是要想熟練的使用這些就還需要多看多練才可以了座舍。