python基礎2-列表、元組、字符串、字典、集合

1、列表和元組操作

定義列表

names = ['Severen',"Peter",'Bob']

通過下標訪問列表中的元素,下標從0開始計數

>>> names[0]
'Severen'
>>> names[2]
'Bob'
>>> names[-1]
'Bob'
>>> names[-2] #還可以倒着取
'Peter'

切片:取多個元素

>>> names = ["Severen","Peter","Bob","John","Tom","Cat"]
>>> names[1:4]  #取下標1至下標4之間的數字,包括1,不包括4
['Peter', 'Bob', 'John']
>>> names[1:-1] #取下標1至-1的值,不包括-1
['Peter', 'Bob', 'John', 'Tom']
>>> names[0:3]
['Severen', 'Peter', 'Bob']
>>> names[:3] #如果是從頭開始取,0可以忽略,跟上句效果一樣
['Severen', 'Peter', 'Bob']
>>> names[3:] #如果想取最後一個,必須不能寫-1,只能這麼寫
['John', 'Tom', 'Cat']
>>> names[3:-1] #這樣-1就不會被包含了
['John', 'Tom']
>>> names[0::2] #後面的2是代表,每隔一個元素,就取一個
['Severen', 'Bob', 'Tom']
>>> names[::2] #和上句效果一樣
['Severen', 'Bob', 'Tom']

追加

>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat']
>>> names.append("IamNew")
>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']

插入

>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.insert(2, '強行從Bob前面插入')
>>> names
['Severen', 'Peter', '強行從Bob前面插入', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']

>>> names.insert(4, '強行從Bob後面插入')
>>> names
['Severen', 'Peter', '強行從Bob前面插入', 'Bob', '強行從Bob後面插入', 'John', 'T
om', 'Cat', 'IamNew']

修改

>>> names
['Severen', 'Peter', '強行從Bob前面插入', 'Bob', '強行從Bob後面插入', 'John', 'T
om', 'Cat', 'IamNew']
>>> names[2] = '該換人了'
>>> names
['Severen', 'Peter', '該換人了', 'Bob', '強行從Bob後面插入', 'John', 'Tom', 'Cat
', 'IamNew']

刪除

>>> names
['Severen', 'Peter', '該換人了', 'Bob', '強行從Bob後面插入', 'John', 'Tom', 'Cat
', 'IamNew']
>>> del names[2]
>>> names
['Severen', 'Peter', 'Bob', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 'IamNew']

>>> names.remove("Peter") #刪除指定元素
>>> names
['Severen', 'Bob', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.pop() #刪除列表最後一個值,返回被刪除的值
'IamNew'
>>> names
['Severen', 'Bob', '強行從Bob後面插入', 'John', 'Tom', 'Cat']
>>> names.pop(1) #刪除列表中指定索引的值,返回被刪除的值
'Bob'
>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat']

擴展

>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat']
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 1, 2, 3]

獲取下標

>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 1, 2, 3]
>>> names.index('Tom')
3 #只返回找到的第一個下標

統計

>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 1, 2, 3, 'Tom']
>>> names.count('Tom')
2

排序&反轉

>>> names
['Severen', '強行從Bob後面插入', 'John', 'Tom', 'Cat', 1, 2, 3, 'Tom']
>>> names.sort() #排序
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str' #3.0裏不同數據類型不能放在一起排序了
>>> names[-4] = '1'
>>> names[-3] = '2'
>>> names[-2] = '3'
>>> names
['Cat', 'John', 'Severen', 'Tom', '強行從Bob後面插入', '1', '2', '3', 'Tom']
>>> names.sort()
>>> names
['1', '2', '3', 'Cat', 'John', 'Severen', 'Tom', 'Tom', '強行從Bob後面插入']
>>> names.reverse() #反轉
>>> names
['強行從Bob後面插入', 'Tom', 'Tom', 'Severen', 'John', 'Cat', '3', '2', '1']

複製

#淺copy的三種實現方式:
n1 = copy.copy(names)
n2 = names[:]
n3 = list(names)

#淺copy的應用場景:一對夫妻有一個公共的銀行賬號(第2周第9章8分鐘)

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
元組
元組其實跟列表差不多,也是存一組數,只不是它一旦創建,便不能再修改,所以又叫只讀列表

語法

names = ("severen","jack","tom")

它只有2個方法,一個是count,一個是index。

2、字符串操作

name = "severen"
name.capitalize()  首字母大寫
name.casefold()   大寫全部變小寫
name.center(50,"-")  輸出 '---------------------severen----------------------'
name.count('ve') 統計ve出現次數
name.encode()  將字符串編碼成bytes格式
name.endswith("en")  判斷字符串是否以en結尾
 "seve\tren".expandtabs(10) 輸出'seve      ren', 將\t轉換成多長的空格 
 name.find('A')  查找A,找到返回其索引, 找不到返回-1

format :
    >>> msg = "my name is {}, and age is {}"
    >>> msg.format("severen",22)
    'my name is severen, and age is 22'
    >>> msg = "my name is {1}, and age is {0}"
    >>> msg.format("severen",22)
    'my name is 22, and age is severen'
    >>> msg = "my name is {name}, and age is {age}"
    >>> msg.format(age=22,name="severen")
    'my name is severen, and age is 22'
format_map
    >>> msg.format_map({'name':'severen','age':22})
    'my name is severen, and age is 22'

msg.index('a')  返回a所在字符串的索引
'9aA'.isalnum()   True,包含所有的英文字母和數字
name.isalpha()   True,純英文字母組成
'9'.isdigit() 是否整數
b.isidentifier() #檢測一段字符串可否被當作標誌符,即是否符合變量命名規則
str.islower() 是否爲小寫
str.isupper() 是否爲大寫
str.isspace() 是否爲空格
'My Name Is'.istitle() 是否每個字母都大寫

 >>>"|".join(['seve','jack','rain'])
'seve|jack|rain'

>>> n4.ljust(40,"-")
'Hello 2orld-----------------------------'
>>> n4.rjust(40,"-")
'-----------------------------Hello 2orld'

str.lower() 大寫變小寫
str.upper() 小寫變大寫

str.strip() 去掉兩邊的空格和回車
str.lstrip()
str.rstrip()

>>>p = str.maketrans('abcdef', '123456')
>>>print('severen'.translate(p))
s5v5r5n

msg.swapcase() 大小寫互換

str.replace(old, new, count) 從左到右替換count個,無第三個參數默認全部替換

str.rfind(v) 找到最右邊的v的下標
str.split(v) 按照v分割str,返回list,默認v爲空格

 >>> msg.zfill(40)
'00000my name is {name}, and age is {age}'

3、字典操作

字典一種key - value 的數據類型
語法

info = {
    'stu1101': "Zhangsan",
    'stu1102': "Lisi",
    'stu1103': "Wangwu",
}

字典的特性:

  • dict是無序的
  • key必須是唯一的,so 天生去重

>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info['stu1104'] = 'severen'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}

#update
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> b = {1:2,3:4, "stu1105":"severen"}
>>> info.update(b)
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 1: 2, 3: 4, 'stu1105': 'severen'}

>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info.pop("stu1101") # way1,有返回值
'bob'
>>> info
{'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> del info['stu1102'] #way2,無返回值
>>> info
{'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info.popitem() # way3,隨機刪除
('stu1104', 'severen')

>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info['stu1101'] = 'bob'
>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}

>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> 'stu1102' in info #標準用法
True
>>> info.get('stu1102') #獲取
'Lisi'
>>> info['stu1102'] #同上
'Lisi'
>>> info['stu1105'] #如果一個key不存在,就報錯,get不會,不存在只返回None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'stu1105'

>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info.values()
dict_values(['Zhangsan', 'Lisi', 'Wangwu'])
>>> info.keys()
dict_keys(['stu1101', 'stu1102', 'stu1103'])
>>> info.items()
dict_items([('stu1101', 'Zhangsan'), ('stu1102', 'Lisi'), ('stu1103', 'Wangwu')])

others

#setdefault
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info.setdefault('stu1106', 'severen') # 字典中不存在key,新增,返回value
'severen'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1106': 'severen'}
>>> info.setdefault('stu1102', 'bob') #字典中存在key,不修改原來的value,返回字典中的value
'Lisi'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1106': 'severen'}

多級字典嵌套及操作

data = {
	'浙江': {
		'台州': {
			'玉環': ['沙門', '楚門', '凱門'],
			'溫嶺': ['嶴環', '三門']
		},
		'寧波': {
			'鎮海': {},
			'鄞州': {}
		},
		'杭州': {}
	},
	'北京': {
		'朝陽': {},
		'臨平': {}
	},
	'廣東': {}
}

>>> data['浙江']['台州']['玉環'][1] += 'haha'
>>> data['浙江']['台州']['玉環']
['沙門', '楚門haha', '凱門']

循環

#方法1
for key in info: #效率比方法2高
    print(key,info[key])

#方法2
for k,v in info.items(): #會先把dict轉成list,數據裏大時莫用
    print(k,v)

4、集合操作

集合是一個無序的,不重複的數據組合,它的主要作用如下:

  • 去重,把一個列表變成集合,就自動去重了
  • 關係測試,測試兩組數據之前的交集、差集、並集等關係

基本操作

s = set([3,5,9,10])      #創建一個數值集合  
t = set("Hello")         #創建一個唯一字符的集合 

t.add('x')            # 添加一項  
s.update([10,37,42])  # 在s中添加多項 

使用remove()可以刪除一項:  
t.remove('H') # 不存在,會報錯
t.discard('H') # 不存在,不會報錯
t.pop() # 隨機刪除

set 的長度:
len(s)  

x in s  
測試 x 是否是 s 的成員  
  
x not in s  
測試 x 是否不是 s 的成員

s.issubset(t)  
s <= t  
測試是否 s 中的每一個元素都在 t 中  
  
s.issuperset(t)  
s >= t  
測試是否 t 中的每一個元素都在 s 中

s.union(t)  
s | t  # t 和 s的並集
返回一個新的 set 包含 s 和 t 中的每一個元素  
  
s.intersection(t)  
s & t  # t 和 s的交集
返回一個新的 set 包含 s 和 t 中的公共元素  
  
s.difference(t)  
s - t  # 求差集(在s中,但不在t中)
返回一個新的 set 包含 s 中有但是 t 中沒有的元素  
  
s.symmetric_difference(t)  
s ^ t  # 對稱差集(項在t或s中,但不會同時出現在二者中)
返回一個新的 set 包含 s 和 t 中不重複的元素
           
>>> list_1 = set([1,2,3,4,5])
>>> list_2 = set([6,7,8])
>>> list_1.isdisjoint(list_2) # 兩個列表是否有交集
True
>>> list_1 = set([1,2,3,4,5,6])
>>> list_1.isdisjoint(list_2) 
False       
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章