Python基礎 - 05字串列表
阿新 • • 發佈:2021-10-10
Python基礎 - 05字串列表
一、字串
1.1字串的格式
雙引號或單引號中的資料,就是字串,
使用一對引號來定義字串,當出現符號衝突時可以使用轉義字元,
使用三個單引號、雙引號定義的字串可以包含任意文字。
# 轉義字元 print('haha\nhaha') # 換行 print('haha\thaha') # haha haha print('haha\\haha') # haha\haha print('haha\'hehehe\'haha') # haha'hehehe'haha print("haha\"h") # haha"h
Unicode的崛起
在20世紀60年代到80年代,最流行的字元編碼方案是ASCII(美國資訊交換標準編碼)。
ASCII 比 Unicode 簡單得多,但只能表示256個字元。對英語、法語和其他幾種類似的語言而言,這足夠了。
Unicode提供了一個大得多的字元編碼集。
出於方便考慮,Unicode的前256個字母為ASCII碼,如果只處理英文字元,幾乎不用考慮Unicode的細節。
print(ord('a')) # 97 print(ord('b')) # 98 print(ord('A')) # 65 print(chr(66)) # B print(chr(99)) # c
s1 = 'hello' s2 = s1 s3 = 'hello' print(s1, s2, s3) # hello hello hello print(id(s1)) # 16035697648 print(id(s2)) # 16035697648 print(id(s3)) # 16035697648
# s1, s2, s3 指向同一個地址, 'hello'的記憶體地址
# is 判斷 s4 = 'world' print(id(s4)) # 1041659770672 print(s1 is s3) # True print(s1 is s4) # False
1.2字串的下標和切片
# 字串擷取 字串索引機制: 0 ~ len(s)-1 或 -len(s) ~ -1 s1 = 'ABCDEFG' print(s1[1]) # B print(s1[0]) # A # print(s1[9]) # IndexError: string index out of range print(s1[-1]) # G print(len(s1)) # 7 # 切片 格式:字串變數[start:end) print(s1[1:4]) # BCD print(s1[0:5]) # ABCDE print(s1[:5]) # ABCDE print(s1[-3:-1]) # EF print(s1[-3:]) # EFG 從-3開始到結尾 x = s1[:] print(x) # ABCDEFG print(s1) # ABCDEFG print(id(x)) # 905626932208 print(id(s1)) # 905626932208 print(s1[1:-1]) # BCDEF print('*'*20) print(s1[:-1:2]) # ACE,從-len(s)到-1,step為2 print(s1[1::2]) # BDF print(s1[::4]) # AE # 字串變數[start:end:step] 預設從左向右一個一個取元素 # step: 步長、方向。 正數->從左向右, 負數->從右向左 print(s1[::-1]) # GFEDCBA print(s1[::-2]) # GECA print(s1[0:6:-2]) # 為空 print(s1[6:0:-2]) # GEC
1.3 字串常見操作
- 獲取長度: len
- 查詢內容: find / index / rfind / rindex
- 判斷: startswith / endswith / isalpha / isdigit / isalnum / isspace / isnumeric
- 出現次數: count
- 替換內容: replace
- 切割字串: split / rsplit / splitlines / partition / rpartition
- 修改大小寫: capitalize / title / upper / lower / swapcase
- 空格處理: ljust / rjust / center / lstrip / strip
- 字串拼接: join
注: 在Python中, 字串是不可變的。所有字串的相關方法,都不會改變原有字串,都是返回一個結果。在新的返回值裡,保留了執行後的結果。
# find: 從左向右查詢,只要遇到一個符合要求的則返回位置。沒有找到返回-1。 # rfind: 從右向左查詢,只要遇到一個符合要求的則返回位置。沒有找到返回-1。 # index 與 find 的區別: index如果沒有找到會拋異常
path = 'https://pics2.baidu.com/feed/dong_0824ab18972bd4079fe54f4202278b580eb309a2.jpeg' i = path.find('_') print(i) # 33 第一個匹配到的位置 image_name = path[i + 1:] print(image_name) # 0824ab18972bd4079fe54f4202278b580eb309a2.jpeg i = path.find('#') print(i) # -1 未匹配到時,返回-1 # ValueError: substring not found # i = path.index('#') # print(i) i = path.rfind('.') suffix = path[i:] print(suffix) # .jpeg n = path.count('.') print(n) # 3 s = '0824ab18972bd4079fe54f4202278b580eb309a2.jpeg' result = s.startswith('08') print(result) # True result = s.endswith('mp5') print(result) # False s = 'HELLO' result = s.isalpha() print(result) # True s = 'A1234_' result = s.isalnum() print(result) s = '11123' result = s.isdigit() print(result) s = ' ' result = s.isspace() print(result) # '' -> False ' '-> True ' '-> True s='helloA' result = s.isupper() print(result) result = s.islower() print(result)
s = '佛祖說: 阿彌陀佛,南無阿彌陀佛!'
result = s.replace('佛', '**')
print(result) # **祖說: 阿彌陀**,南無阿彌陀**!
result = s.replace('佛', '**', 1)
print(result) # **祖說: 阿彌陀佛,南無阿彌陀佛!
result = s.replace('佛說', '##', 1) # replace(old, new, count)
print(result) # 佛祖說: 阿彌陀佛,南無阿彌陀佛!
s = '張三 李四 王五'
result = s.split(' ')
print(result) # ['張三', '李四', '王五']
s = '''第一行唱山歌
第二行唱土歌
第三行唱歌
'''
result = s.splitlines()
print(result) # ['第一行唱山歌', '第二行唱土歌', '第三行唱歌']
s = '張三 李四 王五'
result = s.partition(' ')
print(result) # ('張三', ' ', '李四 王五')
result = s.rpartition(' ')
print(result) # ('張三 李四', ' ', '王五')
s = 'hello world'
result = s.title()
print(result) # Hello World
result = s.upper()
print(result) # HELLO WORLD
result = s.lower()
print(result) # hello world
result = s.capitalize()
print(result) # Hello world
s = ' admin '
print(len(s)) # 7
result = s.strip()
print(len(result)) # 5
print(result) # admin
result = s.lstrip()
print(len(result)) # 6
print(result) # admin_
result = s.rstrip()
print(len(result)) # 6
print(result) # _admin
s = 'hello world'
result = s.center(30)
print(result) # | hello world |
result = s.ljust(30)
print(result) # hello world |
result = s.rjust(30)
print(result) # | hello world
name = '趙麗穎'
age = 30
result = '美女{}今年{}歲'.format(name, age)
print(result) # 美女趙麗穎今年30歲
result = '美女{0}今年{1}歲,我也是{1}歲'.format(name,age)
print(result) # 美女趙麗穎今年30歲,我也是30歲
result = '美女{girl}今年{a}歲,我也是{a}歲'.format(girl='君君',a=1)
print(result) # 美女君君今年1歲,我也是1歲
stu_name = '艾瑪'
score_math = 100
score_chinese = 90
s = '{0}本次考試數學分數為:{2},語文分數為:{1},英語分數為:{2}'.format(stu_name,score_chinese,score_math)
print(s) # 艾瑪本次考試數學分數為:100,語文分數為:90,英語分數為:100
s.maketrans(old,new)建立一個轉換表,用於將old中的字元改成new中的相應字元;
s.translate(table) 使用指定轉換表(使用maketrans建立的)對s中的字元進行替換
s.zfill(width) 在s左邊新增足夠多的0,讓字串的長度為width
s = 'aabbcc'
table = s.maketrans('abc','ABC')
print(s.translate(table)) # AABBCC
print('23'.zfill(4)) # 0023
print('-87'.zfill(5)) # -0087
s = '_' print(s.join('abc')) # a_b_c print(s.encode()) # b'_' s = 'aaBBcc' print(s.swapcase()) # AAbbCC
二、列表
2.1定義列表
list1 = [] # 空列表
list2 = ['牛奶', '麵包', '火腿', '辣條', '饅頭']
print(type(list1)) # <class 'list'>
print(list2[3]) # 辣條
print(list2[0]) # 牛奶
2.2列表操作
# 切片 [start,end)
print(list2[1:3]) # ['麵包', '火腿']
print(list2[:2]) # ['牛奶', '麵包']
print(list2[::-3]) # ['饅頭', '麵包']
print(list2[::3]) # ['牛奶', '辣條']
print(list2[-2:-5:-2]) # ['辣條', '麵包']
print(list2[-2::-5]) # ['辣條'] 從右向左,-2到-5
# 新增 list1 = [] list2 = ['麵包'] list1.append('蘋果') list1.append('香蕉') list1.append('木瓜') print(list1) # ['蘋果', '香蕉', '木瓜'] list1.append(list2) print(list1) # ['蘋果', '香蕉', '木瓜', ['麵包']] list1 = list1 + list2 print(list1) # ['蘋果', '香蕉', '木瓜', ['麵包'], '麵包'] list1.extend(list2) print(list1) # ['蘋果', '香蕉', '木瓜', '麵包'] print(list1 * 2) # ['蘋果', '香蕉', '木瓜', '麵包', '蘋果', '香蕉', '木瓜', '麵包']
if '蘋果' in list1:
print('存在')
else:
print('不存在')
# pop(index): 根據下標刪除列表中的元素,不能超出範圍
# pop(): 從後往前依次刪除
list1 = ['蘋果', '香蕉', '木瓜', '麵包', '饅頭']
list1.pop()
print(list1) # ['蘋果', '香蕉', '木瓜', '麵包']
list1.pop()
print(list1) # ['蘋果', '香蕉', '木瓜']
# remove: 只刪除匹配到,如果列表中有多個同名元素,只刪除遇到的第一個元素,後面的元素不會被刪除。
list2 = ['蘋果', '饅頭', '香蕉', '木瓜', '麵包', '饅頭']
list2.remove('饅頭')
print(list2) # ['蘋果', '香蕉', '木瓜', '麵包', '饅頭']
# ValueError: list.remove(x): x not in list
# list2.remove('菠蘿')
list2 = ['蘋果', '饅頭', '香蕉', '木瓜', '麵包', '饅頭']
for i in list2:
if i == '饅頭':
list2.remove(i)
print(list2) # ['蘋果', '香蕉', '木瓜', '麵包']
list3 = ['蘋果', '饅頭', '饅頭', '饅頭', '香蕉', '木瓜', '麵包', '饅頭', '菠蘿']
for i in list3:
if i == '饅頭':
list3.remove(i)
print(list3) # ['蘋果', '香蕉', '木瓜', '麵包', '饅頭','菠蘿']
list4 = ['蘋果', '饅頭', '饅頭', '香蕉', '木瓜', '麵包', '饅頭', '菠蘿']
n = 0
while n < len(list4):
if list4[n] == '饅頭':
list4.remove('饅頭')
else:
n += 1
print(list4) # ['蘋果', '香蕉', '木瓜', '麵包', '菠蘿']
list1 = [1, 2, 3, 4, 5, 6]
list1.insert(1, 8)
print(list1) # [1, 8, 2, 3, 4, 5, 6]
list1[1] = 9
print(list1) # [1, 9, 2, 3, 4, 5, 6]
pos = list1.index(4)
list1[pos] = 14
print(list1) # [1, 9, 2, 3, 14, 5, 6]
li = ['蘋果', 1, 2, '蘋果', '蘋果', 45, 12, '蘋果']
for i in range(li.count('蘋果')):
li.remove('蘋果')
print(li) # [1, 2, 45, 12]
del li
# NameError: name 'li' is not defined
# li.append(10)
# print(li)
list1 = [1, 2, 3, 4, 5, 6]
print(id(list1)) # 418405881856
list2 = list1
print(list2) # [1, 2, 3, 4, 5, 6]
print(id(list2)) # 418405881856
list2.append(88)
print(list1) # [1, 2, 3, 4, 5, 6, 88]
print(list2) # [1, 2, 3, 4, 5, 6, 88]
list1.clear()
print(list2) # []
del list2
print(list1) # []
a = 'hello'
b = a
c = a
del a
print(b, c) # hello hello
import random
numbers = []
for i in range(8):
ran = random.randint(1,20)
numbers.append(ran)
print(numbers) # [15, 6, 20, 6, 4, 8, 16, 13]
numbers.sort() # 預設為升序
print(numbers) # [4, 6, 6, 8, 13, 15, 16, 20]
numbers.sort(reverse=True)
print(numbers) # [18, 17, 13, 10, 9, 6, 1, 1]
# 反轉
numbers.reverse() # [18, 5, 17, 19, 3, 6, 7, 10]
print(numbers)
# 自引用列表: 讓一個列表元素指向列表本身 # 列印輸出中的[...]表明,Python能夠識別自引用,沒有愚蠢地不斷列印列表。 lst = [1, 2, 'c', 'd', 'f'] lst[2] = lst print(lst) # [1, 2, [...], 'd', 'f']
# 列表迴圈
numbers = [18, 5, 17, 19, 3, 6, 7, 10]
for i in numbers:
print(i)
#交換兩個變數的值
a = 2
b = 3
print(a, b) # 2 3
c = a
a = b
b = c
print(a, b) # 3 2
a, b = b, a
print(a, b) # 2,3
# 手動氣泡排序:
num = []
for i in range(8):
ran = random.randint(1, 100)
num.append(ran)
print('排序前的num:', num)
for i in range(len(num)-1):
for j in range(len(num)-1-i):
if num[j] > num[j + 1]:
temp = num[j]
num[j] = num[j + 1]
num[j + 1] = temp
else:
j += 1
print('第{}次排序結果為{}'.format(i,num))
print('排序後的num:', num)
#-----------------------------------
排序前的num: [89, 54, 41, 31, 82, 70, 42, 15]
第0次排序結果為[54, 41, 31, 82, 70, 42, 15, 89]
第1次排序結果為[41, 31, 54, 70, 42, 15, 82, 89]
第2次排序結果為[31, 41, 54, 42, 15, 70, 82, 89]
第3次排序結果為[31, 41, 42, 15, 54, 70, 82, 89]
第4次排序結果為[31, 41, 15, 42, 54, 70, 82, 89]
第5次排序結果為[31, 15, 41, 42, 54, 70, 82, 89]
第6次排序結果為[15, 31, 41, 42, 54, 70, 82, 89]
排序後的num: [15, 31, 41, 42, 54, 70, 82, 89]