淺談字符串、列表、元組、集合、字典

字符串

字符串是 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 
基基基基非非非非非基基非基基基非基非非基基非非非基非非基基非

總結

字符串、列表、元組、集合、字典這些東西有很多的相似之處也有很多不同之處,比如字符串和列表,元組都支持索引,字符串是和元組不能更改里面的內容,而列表卻可以修改里面的內容。知識點很多,但是找到相似之處和不同之處掌握這些知識點還是很容易的,但是要想熟練的使用這些就還需要多看多練才可以了。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容