字符串
字符串是 Python 中最常用的數據類型。我們可以使用引號('或")來創建字符串。Python 不支持單字符類型,單字符也在Python也是作為一個字符串使用。
字符串索引(下標)
所謂“下標”,就是編號,就好比超市中的存儲柜的編號,通過這個編號就能找到相應的存儲空間!
python的字串列表有2種取值順序:
從左到右索引默認0開始的,最大范圍是字符串長度少1
從右到左索引默認-1開始的,最大范圍是字符串開頭
如果你要實現從字符串中獲取一段子字符串的話,可以使用變量 [頭下標:尾下標],就可以截取相應的字符串,其中下標是從 0 開始算起,可以是正數或負數,下標可以為空表示取到頭或尾。
例如:
str1 = 'hello world!'
print(str1[:5]
其結果為'hello',這就是通過下標將字符串切片的方法。
注意:字符串使用下標切片的時候入上面例子中是從str1這個字符串中取出0到5的字符,但是不包括下標為5的字符,因此在使用字符串進行切片的時候應注意切片的是一個半閉半開區間。
字符串常用方法
字符串的方法有很多詳細的參考Python3 字符串
通過以下代碼展示部分方法的使用:
str1 = 'hello, world!'
print(len(str1))
#返回字符串的長度
print(str1.capitalize())
#將字符串的第一個字符轉換為大寫!
print(str1.upper())
#將字符串中所有小寫字母轉換為大寫
print(str1.lower())
#將字符串中所有字母轉化為小寫
print(str1.title())
#將字符串中所有的單詞首字母都大寫
print(max(str1))
#返回字符串中最大的字母(以ASCII碼表為參考)同理也有min()方法
print(str1.find('or'))
#從左到右進行查找,找到了返回索引,找不到返回-1,從右往左查找使用rfind()方法
#print(str1.index("shit")) #z找不到就出現錯誤,找到了返回索引
print(str1.startswith("he"))
#檢查一個字符串是不是以he開頭的,同理也有endswith()方法,檢測以哪個字符串結尾
print(str1.center(50,'*'))
#指定長度為50,不夠用*填充,str1居中對齊
str2 = ' asds ldjf '
print(str2.strip())
#跳過字符串兩端的空格,當然也可以指定跳過的字符,默認為跳過空格
print(str2.split('d'))
#以字符串d對當前字符串進行切割,切割后得到一個列表
print(str1[-1:-3:-1])
#表示反向從-1取到-3,后面的-1表示反向選取步長為1,,類似range的用法,只有用負索引時才能給得到反向
print((str1[::-1]))
#實現字符串的反轉
列表
List(列表) 是 Python 中使用最頻繁的數據類型。
列表可以完成大多數集合類的數據結構實現。它支持字符,數字,字符串甚至可以包含列表等(即嵌套)。
列表與字符串類似同樣的支持下標索引的方式取出列表中的元素,絕大多數字符串支持的運算方法在列表中也同樣適用。
列表中元素的增刪改和遍歷
- 列表中增加元素
當需要生成一個有特定規律的列表時,可以使用列表生成式快速的生成一個列表:
list1 = [x * x for x in range(10)]
print('list1=',list1)
list1= [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
- 列表中元素更新
列表中的元素的更新可以直接使用索引對列表指定位置進行修改:
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 語句來刪除列表的的元素,如下實例:
list3 = ['hello', 'world', 1997, 2000]
print ('刪除前的列表', list3)
del list3[2]
print ("刪除第三個元素后的列表 : ", list3)
刪除前的列表 ['hello', 'world', 1997, 2000]
刪除第三個元素后的列表 : ['hello', 'world', 2000]
- 列表中元素的遍歷
通過循環對列表的遍歷方式有很多中,但是通常我們使用如下的方法,既能得到值也能得到索引:
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
列表中的常用方法和函數:
我們通過如下的代碼來了解列表的函數和方法的使用:
f = [100, 200, 500]
# enumerate()枚舉的方式可以即返回list中的值,同時也可以返回其對于的索引值
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不存在會報錯,存在就刪除,可以使用判斷是否存在,然后在刪除,eg:f.remove(5999) if 5999 in f
f.pop() # 默認是移除最后一個,可以移除指定索引的元素f.pop(i)
f.index(500, 2, 5) # 查找500在索引為2到5之間查找,如果找不到會報錯,找到了返回索引
# f.clear() #表示清空
f.reverse() # 表示將f這個列表反向,直接修改f
print(reversed(f))
f.sort() # 表示將f進行排序,默認升序排列,可以使用reverse反向排序,也可以指定排序關鍵字key,直接修改f
sorted(f, reverse=True, key=len) # python內置的排序函數,返回值為一個排好序的新list,
# key=len,key表示指定排序的方式
# 默認是升序排列,如果需要降序,可以通過reverse=True來實現
# python 中的函數幾乎都是沒有副作用的函數(調用函數后不會影響傳入的參數)
print(reversed(f)) # 類似sorted()函數,但是它返回的值不是list列表
print(sorted(f))
print(f)
元組
元組是另一個數據類型,元組類似于列表,列表的切片方法在元組中依然適用,但是元組和列表也有兩個不同的地方:
創建元組使用的是(),而創建列表使用的是[]
列表中的元素可以進行增刪改,元組是不支持增刪改的,只能對整個元組進行刪除
如下示例簡單介紹如何創建元組和元組轉換為列表:
list1 = ['hello', 'python']
tuple1 = (1, 2, 3, 4) # 創建元組
print(tuple1)
tuple2 = tuple(list1) # 將列表轉換為元組
list2 = list(tuple1) #將元組轉換為列表
集合
在Python中set是基本數據類型的一種集合類型,它有可變集合(set())和不可變集合(frozenset)兩種。創建集合set、集合set添加、集合刪除、交集、并集、差集的操作都是非常實用的方法。Python中的集合跟數學上的集合是一致的,內部的元素是無序不重復的。
- 創建集合
集合的創建很簡單,使用花括號{},在括號中指定參數,多個參數用,隔開即可,在集合中set括號中需要的參數的數據類型有:序列(包括字符串、列表、元組),字典或者是另一個集合,但是不能是數值類型,如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'}
集合的交集并集
通過如下代碼了解集合的計算交集和并集的用法:
set1 = {1, 1, 2, 2, 3, 3}
set2 = {1, 3, 5, 7, 9}
set3 = set2 & set1 # 計算交集
set3 = set1.intersection(set2) # 計算交集
print(set3)
set3 = set2 | set1 # 計算并集
set3 = set1.union(set2) # 計算并集
print(set3)
set3 = set1.difference(set2) # 計算差集
print(set3)
set3 = set2 ^ set1 # 計算對稱差
set3 = set1.symmetric_difference(set2) # 計算對稱差
print(set3)
print(set1.issubset(set2)) # 判斷set2是否是set1的子集
print(set1.issuperset(set2)) # 判斷set2是否是set1的父集
set1.discard(100) #如果集合中存在100,則刪除,不存在不報錯
print(set1)
字典
字典是另一種可變容器模型,且可存儲任意類型對象。
字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
鍵必須是唯一的,但值則不必。
值可以取任何數據類型,但鍵必須是不可變的,如字符串,數字或元組。!
訪問字典中的值
因為字典中鍵的唯一性,所以訪問字典中的值的時候,只需要把相應的鍵放入方括弧中即可訪問到鍵對應的值,如下實例:
dict1 = {'name': '王大錘', 'age': 38, 'gender': 'True'}
print(dict1['name'])
王大錘
修改字典
向字典添加新內容的方法是增加新的鍵/值對,修改已有鍵/值對的方法類似于修改列表中的元素,如下實例:
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': '成都七中'}
刪除字典元素
刪除字典中的元素有幾種,能刪單一的元素也能清空字典,清空只需一項操作。
dict2 = {'Name': '王大錘', 'Age': 7, 'Class': 'First'}
del dict2['Name'] # 刪除鍵 'Name'
print (dict2)
#dict2.clear() # 清空字典
del dict2 # 刪除字典
{'Age': 7, 'Class': 'First'}
注意:當使用del刪除字典、或者字典中的元素或者其他的列表的時候如果刪除的內容不存在,都會報錯。在刪除之前都應該先判斷是否存在
列表中的常用的方法
Python字典包含了以下內置方法:
練習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()
練習2:打印楊輝三角
# def striangle():
def main():
lines = int(input('請輸入楊輝三角的行數:'))
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()
請輸入楊輝三角的行數: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
練習3:約瑟夫環
"""
有30個人在海上遇險,為了能讓一部分人活下來不得不將其中15個人扔到海里面去,
有個人想了個辦法就是大家圍成一個圈,由某個人開始從1報數,報到9的人就扔到海里面,
他后面的人接著從1開始報數,報到9的人繼續扔到海里面,直到扔掉15個人。
由于上帝的保佑,15個基督徒都幸免于難,問這些人最開始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。
"""
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
基基基基非非非非非基基非基基基非基非非基基非非非基非非基基非
總結
字符串、列表、元組、集合、字典這些東西有很多的相似之處也有很多不同之處,比如字符串和列表,元組都支持索引,字符串是和元組不能更改里面的內容,而列表卻可以修改里面的內容。知識點很多,但是找到相似之處和不同之處掌握這些知識點還是很容易的,但是要想熟練的使用這些就還需要多看多練才可以了。