Python之路【第二篇】:Python基礎

Python基礎

對於Python,一切事物都是對象,對象基於類建立

因此,如下這些值都時對象:"zhurui"、2二、['北京','上海','深圳'],而且是根據不一樣的類生成的對象。

 

1、基本數據類型

數字(int)

如:2一、4五、56python

每個整數都具有以下功能:linux

 

 1 - int
 2  將字符串轉換爲數字
 3 例子:
 4 a = "123"
 5 print(type(a),a)
 6 輸出結果:
 7 >>> a = "123"
 8 >>> print(type(a),a)
 9 <class 'str'> 123
10 
11 b = int(a)
12 print(type(b),b)
13 
14 輸出結果:
15 >>> b = int(a)
16 >>> print(type(b),b)
17 <class 'int'> 123
18 
19 num = "0022"
20 v = int(num, base=16)
21 print(v)
22 
23 輸出結果:
24 >>> num = "0022"
25 >>> v = int(num, base=16)
26 >>> print(v)
27 34
28 
29 - bit_length
30  #當前數字的二進制,至少用n位表示
31 age = 22
32 v = age.bit_length()
33 print(v)
34 
35 輸出結果:
36 >>> age = 22
37 >>> v = age.bit_length()
38 >>> print(v)
39 5

字符串(str)

一、name.capitalize()   #首字母大寫git

例子:api

>>> test = "zhUrui"
>>> v = test.capitalize()
>>> print(v)
Zhurui

 

二、name.casefold()   #全部變小寫,casefold更牛逼,不少未知的對相應變小寫app

例子:ide

>>> test = "zhUrui"
>>> v1 = test.casefold()
>>> print(v1)
zhurui
>>> v2 = test.lower()
>>> print(v2)
zhurui

 

三、name.center()  #設置寬度,並將內容居中 測試

   name.ljust()   #設置寬度,變量向左,其餘部分用所定義的填充符 填充ui

   name.rjust()  #設置寬度,變量向右,其餘部分用所定義的填充符 填充編碼

      name.zfill()  #設置寬度,默認變量向右,其餘部分用zfill方法特定的填充符"000" 填充spa

>>> test = "zhurui"
>>> v = test.center(20,"")
>>> print(v)
中中中中中中中zhurui中中中中中中中

解釋:
#  20   代指總長度
#   *    空白未知填充,一個字符,無關緊要

輸出結果:
中中中中中中中zhurui中中中中中中中
##########################################
>>> test = "zhurui"
>>> v = test.ljust(20,"*") #ljust 變量靠左,其餘部分用*填充
>>> print(v)
zhurui**************

##################################
>>> test = "zhurui"
>>> v = test.rjust(20,"*") #rjust 變量靠右,其餘部分用*填充
>>> print(v)
**************zhurui
>>> test = "zhurui"
>>> v = test.zfill(20)  ##zfill只能用於000填充
>>> print(v)
00000000000000zhurui

 

 4、name.count()   #去字符串中尋找,尋找子序列的出現次數

>>> test = "Zhuruizhuruiru"
>>> v = test.count('ru')
>>> print(v)
3
>>> v = test.count('z')
>>> print(v)
1

#########################################
>>> test = "Zhuruizhuruiru"
>>> v = test.count('ru', 5, 6)
>>> print(v)
0

 

五、name.encode()  #將字符串編碼成bytes格式

六、name.decode()

 

七、name.endswith("ui")  #判斷字符串是否以ui結尾

   name.startswith('ui')  #判斷字符串是否以ui開始

>>> test = "zhurui"
>>> v = test.endswith('ui')
>>> print(v)
True
>>> v = test.startswith('ui')
>>> print(v)
False

 

 八、"Zhu\tRui".expandtabs(10)  #輸出‘Zhu          Rui’, 將\t轉換爲多長的空格

>>> test = "Zhu\tRui"
>>> v = test.expandtabs(10)
>>> print(v)
Zhu       Rui

################################
test = "username\tpassword\temail\nzhurui\t123456\t24731701@qq.com\nzhurui\t123456\t24731701@qq.com\nzhurui\t123456\t24731701@qq.com"
v = test.expandtabs(20)
print(v)

輸出結果:

C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day1/logging.py
username            password            email
zhurui              123456              24731701@qq.com
zhurui              123456              24731701@qq.com
zhurui              123456              24731701@qq.com

 

九、name.find(A)  #從開始日後找,找到第一個以後,獲取其位置即索引,找不到返回-1

## > 或 >=
# 未找到 -1
>>> test = "williamwilliam" >>> v = test.find('am') >>> print(v) 5 >>> v = test.find('t') #找變量中的"t"字符, >>> print(v) -1 ##沒有找到,返回負一

 

十、name.index('a')  #找不到,報錯

>>> test = "williamwilliam"
>>> v = test.index('a')
>>> print(v)
5
>>> v = test.index('8')  ##找字符串中是否
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

 

十一、name.format()  #格式化,將一個字符串中的佔位符替換爲指定的值

>>> test = 'i am {name}, age {a}'
>>> print(test)
i am {name}, age {a}
>>> v = test.format(name='william',a=22)
>>> print(v)
i am william, age 22

 

>>> test = 'i am {0},age {1}'
>>> print(test)
i am {0},age {1}
>>> v = test.format('william', 22)
>>> print(v)
i am william,age 22

 

 十二、name.format_map() #格式化, 傳入的值{"name":  'william',  "a":  22}

>>> test = 'i am {name}, age {a}'
>>> v1 = test.format(name='zhurui',a=22)
>>> v2 = test.format_map({"name":'zhurui', "a": 19})
>>> print(v1)
i am zhurui, age 22
>>> print(v2)
i am zhurui, age 19

 

1三、name.isalnum() #字符串中是否只包含  字母和數字

>>> test = "234"
>>> v = test.isalnum()
>>> print(v)
True

 

1四、name.isalpha() #是不是字母,漢字

>>> test = "asfdge242"
>>> v = test.isalpha()
>>> print(v)
False
>>> test = "威廉"
>>> v = test.isalpha()
>>> print(v)
True

 

1五、判斷輸入的是不是數字

>>> test = "" # 1 , ②
>>> v1 = test.isdecimal   ##判斷十進制小數
>>> v2 = test.isdigit()
>>> v3 = test.isnumeric()  ##判斷漢語的數字,好比 "二"
>>> print(v1,v2,v3)
<built-in method isdecimal of str object at 0x00000201FE440AB0> False True

 

 1六、name.isprintable() #判斷是否存在不可顯示的字符

\t  製表符
\n 換行
>>> test = "qepoetewt\tfdfde" >>> v = test.isprintable() >>> print(v) False >>> test = "qepoetewtfdfde" >>> v = test.isprintable() >>> print(v) True

 

 1七、name.isspace() #判斷是否所有是空格

>>> test = ""
>>> v = test.isspace()
>>> print(v)
False
>>> test = " "
>>> v = test.isspace()
>>> print(v)
True

 

1八、name.istitle() #判斷是不是標題,其中必須首字母大寫

>>> test = "Return True if all cased characters in S are uppercase"
>>> v1 = test.istitle()
>>> print(v1)
False
>>> v2 = test.title()  #將字符串首字母大寫
>>> print(v2)
Return True If All Cased Characters In S Are Uppercase
>>> v3= v2.istitle()
>>> print(v3)
True

 

1九、***** name.join() #將字符串中的每個元素按照指定分隔符進行拼接(五星重點參數)

>>> test = "出任CEO迎娶白富美"
>>> print(test)
出任CEO迎娶白富美
>>> v = '_'.join(test)
>>> print(v)
出_任_C_E_O_迎_娶_白_富_美
>>>

 

20、name.islower() #判斷是否所有是大小寫 和 轉換爲大小寫

>>> test = "William"
>>> v1 =test.islower() #判斷是否全都是小寫
>>> v2 = test.lower()  #將變量轉換爲小寫
>>> print(v1, v2)
False william
>>>

###################################

>>> test = "William"
>>> v1 =test.isupper() #判斷是否全都是大寫
>>> v2 = test.upper()  #將變量轉換爲大寫
>>> print(v1, v2)
False WILLIAM

 

 2一、移除指定字符串,優先最多匹配

>>> test = 'xa'
>>> v1 =test.isupper()
>>> v = test.lstrip("xa")
>>> print(v)

>>> v = test.rstrip("92exxxexxa")
>>> print(v)

>>> v = test.strip("xa")
>>> print(v)

###################################
# test.lstrip()
# test.rstrip()
# test.strip()
# 去除左右空白
# v = test.lstrip()
# v = test.rstrip()
# v = test.strip()
# print(v)
# print(test)
# 去除\t \n
# v = test.lstrip()
# v = test.rstrip()
# v = test.strip()
# print(v)

 

2二、對應關係替換

>>> test = "aeiou"
>>> test1 = "12345"
>>> v = "asidufkasd;fiuadkf;adfkjalsdjf"
>>> m = str.maketrans("aeiou", "12345")
>>> new_v = v.translate(m)
>>> print(new_v)
1s3d5fk1sd;f351dkf;1dfkj1lsdjf

 

2三、name.partition() #分割爲三部分

>>> test = "testegerwerwegwewe"
>>> v = test.partition('s')
>>> print(v)
('te', 's', 'tegerwerwegwewe')
>>> v = test.rpartition('s')
>>> print(v)
('te', 's', 'tegerwerwegwewe')
>>>

 

2四、name.split() #分格爲指定個數

>>> test = "sagesgegessress"
>>> v = test.split('s',2)
>>> print(v)
['', 'age', 'gegessress']
>>>

 

2五、分割, 只能根據,true, false:是否保留換行

>>> test = "fwerwerdf\frweqnndasfq\fnaqewrwe"
>>> v = test.splitlines(False)
>>> print(v)
['fwerwerdf', 'rweqnndasfq', 'naqewrwe']

 

2六、以xxx開頭,以xx結尾

>>> test = "backend 1.2.3.4"
>>> v = test.startswith('a')
>>> print(v)
False
>>> test.endswith('a')
False

 

2七、name.swapcase() #大小寫轉換

>>> test = "WiiLiAm"
>>> v = test.swapcase()
>>> print(v)
wIIlIaM

 

2八、name.isidentifier() #字母,數字,下劃線  :標識符  def  class

>>> a = "def"
>>> v = a.isidentifier()
>>> print(v)
True

 

2九、name.replace() #將指定字符串替換爲指定字符串,替換功能至關於sed

>>> test = "williamwilliamwilliam"
>>> v = test.replace("am", "bbb")
>>> print(v)
willibbbwillibbbwillibbb
>>> v = test.replace("am", "bbb",2)
>>> print(v)
willibbbwillibbbwilliam
>>>

 字符串總結

################7個基本魔法#################
join    # '_'.join("asdfdfsdsf")
split
find
strip
upper
lower
replace(至關於sed替換功能)


################4個灰魔法#################
1、for循環
 格式:
 for 變量名 in  字符串:
      變量名
break
continue

例子:
test = "好看的妹子有種衝我來"
for item in test:
    print(item)
    break
輸出結果爲:
    好

例子2:
test = "好看的妹子有種衝我來"
index = 0
while index < len(test):
    v = test[index]
    print(v)
    index += 1
print('============')
輸出結果爲:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day12/index1.py
好
看
的
妹
子
有
種
衝
我
來
============

例子3:(比較break跟continue的區別)
test = "好看的妹子有種衝我來"

for item in test:
     print(item)
     break
輸出結果爲:
 好

for item in test:
     print(item)
     continue
輸出結果爲:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day12/index1.py
好
看
的
妹
子
有
種
衝
我
來

2、索引,下標,獲取字符串中的某一個字符
test = "好看的妹子有種衝我來"
v = test[3]
print(v)
輸出結果爲:
妹

3、切片
v = test[0:1]  #標識大於等於0,小於1(0<= <1)
print(v)
輸出結果爲:
好

4、獲取長度
Python3:  len獲取當前字符串中由幾個字符組成
v = len(test)
print(v)
輸出結果爲:
10

注意:
len("asdf")
for循環
索引
切片
5、獲取連續或不連續的數字
Python2中直接建立在內容中
Python3中只有for循環時,才一個一個建立
例子:
r1 = range(10)
print(r1)
輸出結果爲:
10
range(0, 10)
執行for循環時:
纔會一個一個建立打印
r2 = range(1,10)
r3 = range(1,10,2)
幫助建立連續的數字,經過設置步長來指定不連續
v = range(0, 100, 5) #括號中的5表明步長
for item in v:
    print(item)

 練習題:根據用戶輸入的值,輸出每個字符以及當前字符所在的索引位置

將文字  對應的索引打印出來:
方法1:

test = input(">>>")
print(test)   # test = qwe   test[0]   test[1]
l = len(test) # l = 3
print(l)

r = range(0,l) # 0,3
for item in r:
print(item, test[item]) # 0 q,1 w,2 e

方法2:

test = input('>>>')
for item in range(0, len(test)):
    print(item, test[item])
##################### 1個深灰魔法 ######################
字符串一旦建立,不可修改
一旦修改或者拼接,都會形成從新生成字符串
name = "william"
age = "22"
    
info = name + age
print(info)

  

列表(list)

如:["william",'zhurui']、["ray","william"]

#################深灰魔法#####################

一、列表格式

# 中括號括起來

# , 逗號分隔每一個元素

# 列表中的元素能夠是  數字,字符串,列表,布爾值.. 全部的都能放進去

# 「集合」, 內部放置任何東西

 

二、列表中能夠嵌套任何類型

# 列表中的元素能夠是  數字,字符串,列表,布爾值.. 全部的都能放進去

# 「集合」, 內部放置任何東西

 

三、索引取值

# list  # 類,列表
li = [1, 12, 9, "age", ["朱銳", ["19", 10], ""], "william", True]  # 經過list類建立的對象,li

>>> li = [1, 12, 9, "age", ["朱銳", ["19", 10], ""], "william", True]
>>> print(li[2])
9
>>> print(li[4][0])
朱銳

 

四、切片,切片結果也是列表

>>> li = [1, 12, 9, "age", ["朱銳", ["19", 10], ""], "william", True]
>>> print(li[3:-1])
['age', ['朱銳', ['19', 10], ''], 'william']

 

五、列表是可迭代的因此for循環、while循環都通用

>>> li = [1, 12, 9, "age", ["朱銳", ["19", 10], ""], "william", True]
>>> for item in li:
...   print(item)
...
1
12
9
age
['朱銳', ['19', 10], '']
william
True
>>>

 

####列表元素,能夠被修改

六、經過索引的方式修改

>>> li = [1, 12, 9, "age", ["朱銳", ["19", 10], ""], "william", True]
>>> li[0] = "zhurui"
>>> print(li)
['zhurui', 12, 9, 'age', ['朱銳', ['19', 10], ''], 'william', True]
>>> li[1] = [11,22,44] #將原來索引1所對應內存中的12,賦值一個新的列表[11,22,44]
>>> print(li)
['zhurui', [11, 22, 44], 9, 'age', ['朱銳', ['19', 10], ''], 'william', True]
>>>

 

七、經過切片的方式修改列表中的元素

#修改中還有一個特殊的方法del
>>> li = [1, 12, 9, "age", ["朱銳", ["19", 10], ""], "william", True]
>>> del li[1]
>>> print(li)
[1, 9, 'age', ['朱銳', ['19', 10], ''], 'william', True]
>>>

#經過切片的方式刪除
>>> li = [1, 12, 9, "age", ["朱銳", ["19", 10], ""], "william", True]
>>> del li[2:6]  #2<=  <6
>>> print(li)
[1, 12, True]
>>>

#經過切片的方式修改
>>> li = [1, 12, 9, "age", ["朱銳", ["19", 10], ""], "william", True]
>>> li[1:3] = [120,90]
>>> print(li)
[1, 120, 90, 'age', ['朱銳', ['19', 10], ''], 'william', True]
>>>

 

八、in 操做

>>> li = [1, 12, 9, "age", ["朱銳", ["19", 10], "朱"], "william", True]
>>> v1 = "朱銳" in li
>>> print(v1)
False
>>> v2 = "age" in li
>>> print(v2)
True
>>> v3 = "william" in li
>>> print(v3)
True

####列表中的元素

九、操做

>>> li = [1, 12, 9, "age", ["朱銳", ["19", 10], ""], "william", True]
>>> li[4][1][0]
'19'

 

十、轉換

>>> s = 123
>>> a = "123"
>>> int(a)  #將字符串轉換爲數字
123
>>> a = 123
>>> str(a)  #將數字轉換爲字符串
'123'

##字符串轉換爲列表
>>> li = list("asdfgeqrererdfgaf")  #字符串轉換爲列表實質是內部使用了for循環
>>> print(li)
['a', 's', 'd', 'f', 'g', 'e', 'q', 'r', 'e', 'r', 'e', 'r', 'd', 'f', 'g', 'a', 'f']
>>>

>>> s = "erewsfsasdfe"
>>> new_li = list(s)
>>> print(new_li)
['e', 'r', 'e', 'w', 's', 'f', 's', 'a', 's', 'd', 'f', 'e']


##列表轉換爲字符串,有兩種處理方法:
1、須要本身寫for循環一個一個處理:
>>> li = [12,14,146,"343","william"]
>>> r = str(li)
>>> print(r)
[12, 14, 146, '343', 'william']  #當直接將列表使用str轉換爲字符串時,其餘的都無變化,只是雙引號變爲單引號
>>> s = ""  #定義一個空的字符串
>>> for i in li:  #循環列表
...   s += str(i)  #使用for循環將列表中的元素轉換爲字符串與空字符串相加,獲得新的變量s
...
>>> print(s)
1214146343william

2、直接使用字符串join方法:只僅僅適用於列表中的元素只有字符串
>>> li = ["4324","william"]
>>> v = "".join(li)
>>> print(v)
4324william

##補充:字符串建立後,不可修改

>>> v = "william"
>>> v = v.replace('w','am') #使用字符串的方法,將w替換爲am
>>> print(v)
amilliam
>>> li = [11,232,434,45]
>>> li[0]
11
>>> li[0] = 999  #從新賦值標識爲的值
>>> print(li)
[999, 232, 434, 45]

##字符串建立後,若是修改會報錯
>>> s = "william"
>>> s[0]
'w'
>>> s[0] = "E"
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

 

##############灰魔法: list類中提供的方法#####################

一、原來值最後追加,不須要再定義變量

#參數
# 對象.方法(..)  #li對象調用append方法
>>> li = [13,15,45,56,78]
>>> li.append(5)
>>> li.append("william")
>>> li.append([134,34232])
>>> print(li)
[13, 15, 45, 56, 78, 5, 'william', [134, 34232]]
>>>

 

二、清空列表

>>> print(li)
[13, 15, 45, 56, 78, 5, 'william', [134, 34232]]
>>> v = list(li)
>>> print(v)
[13, 15, 45, 56, 78, 5, 'william', [134, 34232]]
>>> v.clear()
>>> print(v)
[]  #列表爲空

 

三、拷貝,淺拷貝,須要新值接收

>>> li = [12,13,14,15,16]
>>> v = li.copy()
>>> print(v)
[12, 13, 14, 15, 16]
>>>

 

四、計算元素出現的次數

>>> li = [12,13,14,13,16]
>>> v = li.count(13)
>>> print(v)
2

 

五、擴展原列表,參數:可迭代對象,內部執行for循環

>>> li = [11,22,33,44,22,45]
>>> li.append([798, "朱銳"])
>>> print(li)
[11, 22, 33, 44, 22, 45, [798, '朱銳']]
>>>
>>> li.extend([798,"朱銳"]) #extend的實質就是下面執行的for循環中append追加
>>> print(li)
[11, 22, 33, 44, 22, 45, [798, '朱銳'], 798, '朱銳']
>>> for i  in [798, "朱銳"]:
...   li.append(i)
...
>>> print(li)
[11, 22, 33, 44, 22, 45, [798, '朱銳'], 798, '朱銳', 798, '朱銳']

 

六、根據值獲取當前值索引位置(左邊優先)

>>> li = [12,14,15,16,18,45]
>>> v = li.index(15)
>>> print(v)
2

 

七、在指定索引位置插入元素

>>> li = [12,14,15,16,18,45]
>>> li.insert(0,99)
>>> print(li)
[99, 12, 14, 15, 16, 18, 45]

 

八、刪除某個值(1.指定索引;2.默認最後一個),並獲取刪除的值

>>> li = [12,14,15,16,18,45]
>>> v = li.pop()
>>> print(li)
[12, 14, 15, 16, 18]
>>> print(v)
45
>>>

>>> li = [12,14,15,16,18,45]
>>> v = li.pop(3)  #跟索引的值,刪除索引的值
>>> print(li)
[12, 14, 15, 18, 45]
>>> print(v)
16

 

九、刪除列表中的指定值,左邊優先

>>> li = [12,14,15,16,18,45]
>>> li.remove(14)
>>> print(li)
[12, 15, 16, 18, 45]

 

十、將當前列表進行翻轉

>>> li = [12,14,15,16,18,45]
>>> li.reverse()
>>> print(li)
[45, 18, 16, 15, 14, 12]
>>>

 

十一、列表的排序

>>> li = [13,34,23,12,45,67]
>>> li.sort()
>>> print(li)
[12, 13, 23, 34, 45, 67]
>>> li.sort(reverse=True)
>>> print(li)
[67, 45, 34, 23, 13, 12]

 

後面更新:

#cmp

#key

#sorted

總結:

################################################
# 列表,有序,元素能夠被修改

# 列表
# list
# li = [111.345,345,456]

################################################

# 元祖,元素不可被修改,不能被增長或者刪除
# tuple
# tu = (11,22,33,44,)
# tu.count(22) 獲取指定元素在元祖中出現的次數
# tu.index(22)

 

元祖(tuple)

################# 深灰魔法 ##################

一、書寫格式

# tu = (123,"william",(11,22),[(33,34)],True,34,56,)

# 通常寫元祖的時候,推薦在最後加,"逗號";

# 元素不可被修改,不能被增長或者刪除

 

二、索引

>>> tu = (123,"william",(11,22),[(33,34)],True,34,56,)
>>> v = tu[1]
>>> print(v)
william

 

三、切片

>>> tu = (123,"william",(11,22),[(33,34)],True,34,56,)
>>> r = tu[0:2]
>>> print(r)
(123, 'william')

 

四、能夠被for循環,可迭代對象

>>> tu = (123,"william",(11,22),[(33,34)],True,34,56,)
>>> for item in tu:
...   print(item)
...
123
william
(11, 22)
[(33, 34)]
True
34
56

 

五、轉換

>>> s = "asdfgher"
>>> li = ["asdfg","asgewerf"]
>>> tu = ("asdf","asfdf")
>>> v = tuple(s) #字符串轉換爲元祖
>>> print(v)
('a', 's', 'd', 'f', 'g', 'h', 'e', 'r')
>>> v = tuple(li) #列表轉換爲元祖
>>> print(v)
('asdfg', 'asgewerf')
>>> v = "_".join(tu) #使用分隔符,將元祖分開
>>> print(v)
asdf_asfdf
>>> li = ["asdf","asdfdghsd"]
>>> li.extend((11,22,33)) #列表後面追加元祖,效果就是將元祖的特徵小括號去掉,直接將元素追加到後面
>>> print(li)
['asdf', 'asdfdghsd', 11, 22, 33]

 

六、元祖的一級元素不可修改/刪除/增長

>>> tu = (111,"william",(11,22),[(33,44)],True,33,44,)
>>> v = tu[3][0][0] #根據索引取值
>>> print(v)
33
>>> v = tu[3]
>>> print(v)
[(33, 44)]
>>> tu[3][0] = 789 #根據索引間接修改值
>>> print(tu)
(111, 'william', (11, 22), [789], True, 33, 44)
>>>

 

字典(dict)

字典一種 key - value 的數據類型,使用就像咱們上學用的字典,經過筆畫、字母來查對應頁的詳細內容。

一、基本結構:

 

#字典
#dict

dit = {
      "k1":"v1"  #鍵值對
      "k2":"v2"      
}

 

字典的特性:

● dict是無序的
● key必須是惟一的,因此天生去重

 

二、字典的value能夠是任何值

>>> info = {
...     "k1": 18,
...     "k2": True,
...     "k3": [
...         11,
...         [],
...         (),
...         22,
...         33,yy
...         {
...             'kk1': 'vv1',
...             'kk2': 'vv2',
...             'kk3': (11,22),
...         }
...     ],
...     "k4": (11,22,33,44)
... }
>>> print(info)
{'k1': 18, 'k3': [11, [], (), 22, 33, {'kk1': 'vv1', 'kk2': 'vv2', 'kk3': (11, 22)}], 'k4': (11, 22, 33, 44), 'k2': True}
>>>

 

三、布爾值(1,0)、列表、字典不能做爲字典的key

>>> info ={
...     1: 'asdf',
...     "k1": 'asdf',
...     True: "123",
...     # [11,22]: 123
...     (11,22): 123,
...     # {'k1':'v1'}: 123
...
... }
>>> print(info)
{'k1': 'asdf', 1: '123', (11, 22): 123}
>>> info ={
...     1: 'asdf',
...     "k1": 'asdf',
...     True: "123",
...     [11,22]: 123 #列表不能做爲字典的key,不然會報錯
...     # {'k1':'v1'}: 123
...
... }
Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
TypeError: unhashable type: 'list'
>>> info ={
...     1: 'asdf',
...     "k1": 'asdf',
...     True: "123",
...     #[11,22]: 123
...     {'k1':'v1'}: 123 #字典不能做爲字典的key,不然會報錯
...
... }
Traceback (most recent call last):
  File "<stdin>", line 6, in <module>
TypeError: unhashable type: 'dict'
>>>

 

四、字典無序

>>> info = {
...     "k1": 18,
...     "k2": True,
...     "k3": [
...         11,
...         [],
...         (),
...         22,
...         33,
...         {
...             'kk1': 'vv1',
...             'kk2': 'vv2',
...             'kk3': (11,22),
...         }
...     ],
...     "k4": (11,22,33,44)
... }
>>> print(info)
{'k1': 18, 'k4': (11, 22, 33, 44), 'k2': True, 'k3': [11, [], (), 22, 33, {'kk1': 'vv1', 'kk2': 'vv2', 'kk3': (11, 22)}]}
>>>

 

五、索引方式找到指點元素

>>> info = {
...     "k1": 18,
...     2: True,
...     "k3": [
...         11,
...         [],
...         (),
...         22,
...         33,
...         {
...             'kk1': 'vv1',
...             'kk2': 'vv2',
...             'kk3': (11,22),
...         }
...     ],
...     "k4": (11,22,33,44)
... }
輸出結果:
>>> v = info['k1']
>>> print(v)
18
>>> v = info[2]
>>> print(v)
True
>>> v = info['k3'][5]['kk3'][0]
>>> print(v)
11

 

六、字典支持del刪除

>>> info = {
...     "k1": 18,
...     2: True,
...     "k3": [
...         11,
...         [],
...         (),
...         22,
...         33,
...         {
...             'kk1': 'vv1',
...             'kk2': 'vv2',
...             'kk3': (11,22),
...         }
...     ],
...     "k4": (11,22,33,44)
... }
>>> del info['k1']
>>> del info['k3'][5]['kk1']
>>> print(info)
{'k4': (11, 22, 33, 44), 2: True, 'k3': [11, [], (), 22, 33, {'kk2': 'vv2', 'kk3': (11, 22)}]}

 

七、for循環

>>> info = {
...     "k1": 18,
...     2: True,
...     "k3": [
...         11,
...         [],
...         (),
...         22,
...         33,
...         {
...             'kk1': 'vv1',
...             'kk2': 'vv2',
...             'kk3': (11,22),
...         }
...     ],
...     "k4": (11,22,33,44)
... }
>>> for item in info:
...   print(item)
...
k1
k4
2
k3

>>> for item in info.keys():
...   print(item)
...
k1
k4
2
k3

>>> for item in info.values():
...   print(item)
...
18
(11, 22, 33, 44)
True
[11, [], (), 22, 33, {'kk1': 'vv1', 'kk2': 'vv2', 'kk3': (11, 22)}]
>>>
##如下兩種方法等價於
>>> for item in info.keys():  
...   print(item,info[item])
...
k1 18
k4 (11, 22, 33, 44)
2 True
k3 [11, [], (), 22, 33, {'kk1': 'vv1', 'kk2': 'vv2', 'kk3': (11, 22)}]
>>>
>>> for k,v in info.items(): #會把dict轉成list,數據量大時莫用
...   print(k,v)
...
k1 18
k4 (11, 22, 33, 44)
2 True
k3 [11, [], (), 22, 33, {'kk1': 'vv1', 'kk2': 'vv2', 'kk3': (11, 22)}]
>>>

 

補充關於布爾值:

八、根據序列,建立字典,並指定統一的值

>>> v = dict.fromkeys(["k1",123,"999"],123) #分別指定列表中元素做爲key,而123做爲value,建立新的字典
>>> print(v)
{'999': 123, 'k1': 123, 123: 123}
>>> v = dict.fromkeys(("k1",123,"999",),123) #分別指定元祖中元素做爲key,而123做爲value,建立新的字典
>>> print(v)
{'999': 123, 'k1': 123, 123: 123} #生成新的字典
>>>

 

九、根據key獲取值,key不存在時,能夠指定默認值(None)

v= dic['k12121312']
print(v)
v = dic.get('k1',11111)
print(v)

 

十、刪除並獲取值

>>> v = dic.pop('k1',90)
>>> print(dic,v)
{'k2': 'v2'} v1
>>> dic = {
...     "k1": 'v1',
...     "k2": 'v2'
... }
>>> v = dic.pop("k1")
>>> print(v)
v1
>>> print(dic)
{'k2': 'v2'}
>>> k,v = dic.popitem()
>>> print(dic,k,v)
{} k2 v2

 

十一、設置值

#已存在,不設置,獲取當前key對應的值

#不存在,設置,獲取當前key對應的值

>>> dic = {
...     "k1": 'v1',
...     "k2": 'v2'
... }
>>> v = dic.setdefault('k1111','123')
>>> print(dic,v)
{'k1111': '123', 'k1': 'v1', 'k2': 'v2'} 123
>>>

 

十二、更新

>>> dic = {
...   "k1":'v1',
...   "k2":'v2'
... }
>>> dic.update({'k1':'11dfe','k3':123})
>>> print(dic)
{'k3': 123, 'k1': '11dfe', 'k2': 'v2'}
>>>
>>> dic.update(k1=236,k3=345,k5="asdf")
>>> print(dic)
{'k3': 345, 'k5': 'asdf', 'k1': 236, 'k2': 'v2'}
>>>

 

###################整理######################

# 1、數字
# int(..)
# 2、字符串
# replace/find/join/strip/startswith/split/upper/lower/format
# tempalte = "i am {name}, age : {age}"
# # v = tempalte.format(name='william',age=22)
# v = tempalte.format(**{"name": 'william1','age': 23})
# print(v)
# 3、列表
# append、extend、insert
# 索引、切片、循環
# 4、元組
# 忽略
# 索引、切片、循環         以及元素不能被修改
# 5、字典
# get/update/keys/values/items
# for,索引

# dic = {
#     "k1": 'v1'
# }

# v = "k1" in dic
# print(v)

# v = "v1" in dic.values()
# print(v)
# 6、布爾值
# 0 1
# bool(...)
# None ""  () []  {} 0 ==> False

 

 set集合

set是一個無序且不重複的元素集合

做用:去重,關係運算

#定義:
        知識點回顧
        可變類型是不可hash類型(列表、字典)
        不可變類型是可hash類型(數字、字符串、元祖)

#定義集合:
        集合:能夠包含多個元素,用逗號分割,
        集合的元素遵循三個原則:
            一、每一個元素必須是不可變類型(可hash,可做爲字典的key)
            二、沒有重複的元素
            三、無序

注意集合的目的是將不一樣的值存放到一塊兒,不一樣的集合間用來作關係運算,無需糾結於集合中單個值

#優先掌握的操做
#一、長度len
#二、成員運算in和not in

#三、 &交集
#四、 |並集
#五、 -差集
#六、 ^對稱差集
#七、 ==
#八、 父集: >,>=
#九、 子集: <,<=

基本操做

一、添加(add())

s = set(['william', 'zhurui', 'grace'])
print(s)
運行結果:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
{'william', 'zhurui', 'grace'}
s = {1,2,3,4,5,6}
s.add('s') #添加字符串s
s.add('3') #添加字符串3
s.add(3) #添加數字3,原來集合中有元素3,新的集合是去重後的結果
print(s)
輸出結果:
{1, 2, 3, 4, 5, 6, '3', 's'}

 

二、添加多項(update())

s1 = {1,2}
s2 = {1,2,3}
s1.update(s2)
print(s1)

s1 = {1,2}
s2 = {1,2,3}
s1.update([1,2,3,4])
s1.add() #更新一個值時用到
s1.union(s2) #不更新 輸出結果爲: C:\Python35\python3.exe C:
/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py {1, 2, 3, 4}

 

三、清空(clear())

1 s = {1,2,3,4,5,6}
2 s.clear()
3 print(s)
4 輸出結果:
5 C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
6 set()

 

 四、刪除(pop(),remove(),discard())

①pop() 隨機刪

 1 s = ['william', 12, 13, 14, 16, 89]
 2 s1 = set(s)
 3 print(s1)
 4 輸出結果:
 5 C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
 6 {12, 13, 14, 16, 'william', 89}
 7 s1.pop()
 8 print(s1)
 9 輸出結果爲:
10 C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
11 {12, 13, 'william', 14, 16, 89}
12 {13, 'william', 14, 16, 89} 

注:pop是隨機刪除集合中的某個元素;

②remove() 指定刪除

s = ['william', 12, 13, 14, 16, 89]
s1 = set(s)
print(s1)
s1.remove('william')
print(s1)
輸出結果爲:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
{89, 12, 13, 14, 16, 'william'}
{89, 12, 13, 14, 16} #跟上面集合對比,william元素被刪除

 

 name.remove('zhurui') #刪除元素不存在會報錯

s = ['william', 12, 13, 14, 16, 89]
s1 = set(s)
s1.remove('zhurui') #zhurui這個元素不存在
print(s1)
輸出結果爲:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
Traceback (most recent call last):
  File "C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py", line 44, in <module>
    s1.remove('zhurui')
KeyError: 'zhurui'

 

 name.discard('zhurui') #刪除元素不存在不會報錯

s = ['william', 12, 13, 14, 16, 89]
s1 = set(s)
s1.discard('zhurui') #刪除一個沒有的元素,執行結果並無報錯
print(s1)
輸出結果爲:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
{'william', 12, 13, 14, 16, 89}  

注:用remove刪除時,當元素不存在,會報錯;

③discard()

s = ['william', 12, 13, 14, 16, 89]
s1 = set(s)
s1.discard('zhurui') #刪除一個沒有的元素,執行結果並無報錯
print(s1)
輸出結果爲:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
{'william', 12, 13, 14, 16, 89}  

 

 注:用discard刪除不存在的元素時,不會出現報錯

五、長度(len())

name_1 = [1,2,3,4,7,8,7,10]
name_1 = set(name_1)
print(len(name_1))
輸出結果:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
7

 

六、x in s

>>> name_1 = [1,2,3,4,7,8,7,10]
>>> name_1 = set(name_1)
>>> 1 in name_1
True

 

name_1 = [1,2,3,4,7,8,7,10]
name_1 = set(name_1)
# print(len(name_1))
print(1 in name_1)
輸出結果:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
True

 

七、x not in s

name_1 = [1,2,3,4,7,8,7,10]
name_1 = set(name_1)
# print(len(name_1))
print(13 not in name_1)
輸出結果:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
True

 

 

 關係測試

一、交集(intersection())

python_l=['lcg','szw','zjw','lcg']
linux_l=['lcg','szw','sb']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s, l_s)
print(p_s.intersection(l_s)) #跟&方法方法同樣都是求交集
print(p_s&l_s)
輸出結果:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
{'zjw', 'szw', 'lcg'} {'szw', 'lcg', 'sb'}
{'szw', 'lcg'}
{'szw', 'lcg'}

 

 二、並集(union())

python_l=['lcg','szw','zjw','lcg']
linux_l=['lcg','szw','sb']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s, l_s)
print(p_s.union(l_s))
print(p_s|l_s) #並集符號形式表示
輸出結果爲:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
{'lcg', 'zjw', 'szw'} {'sb', 'lcg', 'szw'}
{'lcg', 'sb', 'zjw', 'szw'}
{'lcg', 'sb', 'zjw', 'szw'}

 

三、差集(difference())

python_l=['lcg','szw','zjw','lcg']
linux_l=['lcg','szw','sb']
p_s = set(python_l)
l_s = set(linux_l)
print('差集', p_s-l_s)
print(p_s.difference(l_s))
輸出結果:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
差集 {'zjw'}
{'zjw'}

print('差集', l_s-p_s)
print(l_s.difference(p_s))
輸出結果:
差集 {'sb'}
{'sb'}

 

四、交叉補集(symmetric_difference()) #把兩個集合沒有交集的數值取出來

python_l=['lcg','szw','zjw','lcg']
linux_l=['lcg','szw','sb']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s, l_s)
print(p_s.symmetric_difference(l_s))
print(p_s^l_s) 輸出結果: C:\Python35\python3.exe C:
/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py {'lcg', 'zjw', 'szw'} {'lcg', 'szw', 'sb'} {'zjw', 'sb'} #將兩個集合對比,剔除相同部分,差別的部分組成新的集合就是咱們想要的結果

 

五、(difference_update())

python_l = ['lcg', 'szw', 'zjw', 'lcg']
linux_l = ['lcg', 'szw', 'sb']
p_s = set(python_l)
l_s = set(linux_l)
print('差集', p_s-l_s)
p_s.difference_update(l_s)
print(p_s)

 

六、isdisjoint() #判斷兩個集合是否有交集,沒有交集,則返回True

s1 = {1,2,3,}
s2 = {3,4,5,6}
print(s1.isdisjoint(s2)) #判斷兩者有無共有部分
輸出結果:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
False #兩個集合有交集,返回False

 

七、issubset() #判斷一個集合是不是另外一個集合的子集

s1 = {1,2}
s2 = {1,2,3}
print(s1.issubset(s2)) #判斷s1 是不是s2的子集,至關於s1 <= s2
輸出結果:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
True

 

八、issuperset() #判斷一個集合是不是另外一個集合的父集

s1 = {1,2,3}
s2 = {1,2}
print(s1.issuperset(s2))#s1是s2的父集,爲真則返回True
輸出結果:
C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全棧開發/day15/set_集合.py
True
相關文章
相關標籤/搜索