1. 程式人生 > 其它 >字串,列表的內建方法

字串,列表的內建方法

本章內容

  • 字串的其他內建方法
  • 列表內建方法
  • 可變型別與不可變型別
  • 佇列與堆疊

字串的其他內建方法

1.移除字串首尾的指定字元,可以選擇方向 eg:
    s = '$$$$username$$$$'
    print(s.strip('$'))    # username
    print(s.lstrip('$'))   # username$$$$
    print(s.rstrip('$'))   # $$$$username
2.大小寫相關的操作  eg:
    s = 'TonytonY'
    print(s.lower())       # tonytony
    print(s.upper())       # TONYTONY
    # 判斷字串內的所有英文是不是純小寫
    print(s.isupper())     # Flase
    # 判斷字串內的所有英文是不是純小寫
    print(s.isupper())     # Flase
    # 文字驗證碼的原理:
    real_tetx = 'Alex'
    text = input('輸入您的驗證碼>>>:').strip()
    if real_text.isupper() == text.isupper:
        print('輸入正確')
	# 其實就是統一轉換為大寫或者小寫,然後進行校驗
3.判斷字串的開頭或者結尾是否有指定的字元 eg:
    s = 'jason tony 老劉'
    print(s.startswith('j'))      # True
    print(s.endswith('老劉'))     # True
    print(s.startswith('jason'))  # True
4.格式化輸出的傳統方式和四種玩法 eg:
    # 傳統方式
    s = my name is %s my age is %d
    print(s % ('tony', 18))
    # 玩法一:
    s = 'my name is {} my age is {}'
    print(s.format('jsaon', 18))
    # 玩法二:
    s = 'my name is {0} {0} {0} my age is {1}'
    print(s.format('tony', 10))
    # 玩法三:
    s = 'my name is {name}{name} my age is {age}'
    print(s.format(name='tony', age=19))
    # 玩法四:
    name = 'tony'
    age = 99
    print(f'my name is {name} my age is {age}')
5.拼接字串 eg:
    s1 = 'abcd'
    s2 = 'efgh'
    print(s1 + s2)         # abcdefgh
    print(s1 * 10)         # abcdabcdabcdabcdabcd
    print('|'.join(s1))    # a|b|c|d
    print("$".join(['ab', 'cd', 'ef', 'gh']))
    	# ab$cd$ef$gh
"""
join方法相當於把資料內的元素做了一次for迴圈,每次迴圈便加入拼接的字元
"""
    s = [22, 'tony', 'tom', 'jerry']
    print('$'.join(s))
	# 如果拼接了不是字串型別的資料,則會報錯,如上圖所示:
    # 所以join拼接的元素必須都是字串
6.替換字串中指定的字元  eg:
    # 預設替換一次性替換一個元素的所有相同元素
    s = 'tom tom kevin jerry marie lukas kevin'
    print(s.replace('tom', 'jerry'))
    s = 'tom tom kevin jerry marie lukas kevin'
    print(s.replace('tom', 'tony',1))
    # 替換順序預設從左往右
7.判斷字串中是否是純數字  eg:
    s = 'tony999'
    print(s.isdigit())      # Flase
    s = '123456'
    print(s.isdigit())      # True
    score = input('score>>>:')
    if score.isdigit():
        score = int(score)
        print(score)
    else:
        print('好好寫')
"""################必會操作####################"""
1.查詢指定字元所對應的索引值
    s = 'my name is tony'
    print(s.find('n'))         # 列印3
    # 此處沒有列印tony所在的n的索引,因為find查詢是從左向右,找到一個就結束
    # 也可以定義查詢的範圍:
    print(s.find('a', 5, 8))    # # 列印-1,意思是沒有找到
    print(s.index('a', 5, 8))    # 直接報錯,平常不建議使用
    
2.文字位置的改變 eg:
    s = 'username'
    print(s.center(30,'-')) # -----------username-----------
    print(s.ljust(30, '-')) # username----------------------
    print(s.rjust(30, '-')) # ----------------------username
    print(s.zfill(40))  # 00000000000000000000000000000000username
3.特殊符號:斜槓與一些英文字母的組合會產生特殊的含義
	print('my name is tony\nmy age is 18')
	print('my name \ais tony\nmy age\t is 18')
	# 如果要取消效果,可以在前面加一個字母r eg:
4.capitalize,swapcase,title的用法
4.1 capitalize: 首字母大寫 eg:
    text = 'I am a STUDENT'
    print(text.capitalize()) # I am a student
4.2 swapcase 字母大小寫反轉 eg:
    print(text.swapcase()) # i AM A student
4.3 title: 全部首字母大寫 eg:
    print(text.title())   # I Am A Student

列表內建方法

1.型別轉換 eg:
    """列表內是整型和浮點型以及布林值不可以轉換,如下:"""
1.1 字串轉換:
    print(list('my name')) # ['m', 'y', ' ', 'n', 'a', 'm', 'e']
1.2 字典的轉換:
    print(list({'name':'tony','age':18})) # ['name', 'age']
1.3 元組的轉換:
    print(list((1,2,3,4,5)))  # [1, 2, 3, 4, 5]
1.4 集合的轉換:
    print(list({1,2,3,4,5,5,'tony'})) # [1, 2, 3, 4, 5, 'tony']
"""
由上述可以得出:只要可以進行for迴圈的資料型別都可以進行列表的轉換
"""
2. 常見操作如下圖:
3. 間隔:
4.統計列表中元素的個數:
    name_list = ['name', 'age', 'gender', 18]
	print(len(name_list))     # 4
5. 成員運算 
    """最小的判斷條件是單個元素,而不是元素中的字元"""
    name_list = ['name', 'age', 'gender', 18]
    print('name' in name_list)   # True
    name_list = ['name', 'age', 'gender', 18]
    print('n' in name_list)      # False
6. 列表新增元素的方式
6.1 尾部追加'單個'元素:
    name_list = ['name', 'age', 'gender', 18]
    name_list.append('小王')
    print(name_list)     # ['name', 'age', 'gender', 18, '小王']
    name_list.append(['小王'])
    print(name_list)   # ['name', 'age', 'gender', 18, ['小王']]
6.2 指定位置新增'單個'元素:
    name_list.insert(3,'小王')
    print(name_list)  # ['name', 'age', 'gender', '小王', 18]
6.3 合併列表:
    age_list = [18, 15, 16]
    name_list.extend(age_list)   # 第一種
    name_list += age_list        # 第二種
    print(name_list) # ['name', 'age', 'gender', 18, 18, 15, 16]
    # 加號的效率不高
"""extend可以看成是for迴圈+append"""
	eg:
        for i in age_list:
            name_list.append(i)
        print(name_list)
7. 刪除元素
7.1 通用的刪除方式
    name_list = ['name', 'age', 'gender', 18]
    del name_list[0]
    print(name_list)    # ['age', 'gender', 18]
7.2 就地刪除的方式
    name_list.remove('name')
    print(name_list) # ['age', 'gender', 18]
7.3 延遲刪除
    name_list.pop()
    print(name_list)   # ['name', 'age', 'gender']
    # pop() 也可以指定索引值
    name_list.pop(2)
    print(name_list)   # ['name', 'age', 18]
8. 修改元素列表
    name_list[1] = 'male'
    print(name_list)   # ['name', 'male', 'gender', 18]
    # 修改改變的是索引為1的記憶體地址,並不是anme_list的記憶體地址  eg:
    print(id(name_list[1]))  # 2085094278120
    name_list[1] = 'male'
    print(id(name_list[1]))  # 2085095121448
9. 排序
    s = [11, 66, 33, 22, 55,88]
    s.sort()
    print(s)          # [11, 22, 33, 55, 66, 88]
    # 修改尾序
    s.sort(reverse=True)
    print(s)           # [88, 66, 55, 33, 22, 11]
10.反轉
    s.reverse()
    print(s)           # [88, 55, 22, 33, 66, 11]
11.比較運算
    s = [11, 12, 34, 33]
    s2 = [2, 3, 4]
    print(s > s2)      # True 只比較第一個元素,如果是字元,則轉換為字元所構成的數字進行比較,比較就是比較索引位置上的元素 eg:
    s1 = ['A', 'B', 'C']  # A>>>65
    s2 = ['a', 'b']       # a>>>97
    print(s1 > s2)       # False
12.統計列表中元素出現的個數
    l = ['jason','jason','jason','tony','tom','tom'] 
    print(l.count('jason'))      # 3
13. 清空列表
    l.clear()
    print(l)       # []

可變型別與不可變型別

"""
可變型別與不可變型別
    可變型別     列表
        值改變 記憶體地址不變 修改的是本身
    不可變型別   字串
        值改變 記憶體地址肯定遍 修改過程產生了新的值
如何檢視變數的'記憶體地址'
"""
# 話不多說,直接畫解析圖:
# 如果改變的是列表中一個元素的值,那麼這個列表本身的記憶體地址沒有改變,改變的是索引對應的記憶體地址,所以列表是一個可變的資料型別

# 如果改變的是一個字串的值,那麼它會生成新的記憶體地址,原來的記憶體地址不變,所以字串是不變的資料型別,如圖:
# 程式碼體現:
    s = '%%%tony%%%'
    print(s.strip('%'))   # s.strip(%)是新的值 tony
    print(s)     # %%%tony%%% 原來的記憶體地址不變

佇列與堆疊

# 佇列:先進先出 eg:超市排隊結賬 符合佇列的特徵
# 堆疊:先進後出 eg:疊衣服 符合堆疊的特徵
#列表模擬佇列與堆疊
	s = []
	s.append('tony')
	s.append('tom')
	s.append('jerry')
	for i in s:
    	print(i)
 # 列印結果:
	# tony
	# tom
	# jerry
# 堆疊
	s = []
	s.append('tony')
	s.append('tom')
	s.append('jerry')
	print(s.pop())
        print(s.pop())
	print(s.pop())	
# 列印結果為:
	# jerry
	# tom
	# tony