Python數據類型總結

第1章 數據類型:

1.1可變or不可變類型(變量值):

變量的三個特點:id/type/value

可變類型:值改變,但id不變,證明就是在改變原值

不可變類型:值改變,id也跟着變了,證明申請了新的內存空間來存新值,根本沒有改變量值

Ø  證明浮點型是不可變類型

x=1.1
print(id(x))
x=
1.2
print(id(x))

 

#4344525016

#4344525136

Ø  證明int是不可變類型:

x=10
print(id(x))
x=
11
print(id(x))

#4457767232
#4457767264

Ø  證明列表是可變類型:

h=['a','b','c']
print(id(h))
h[
0]='J'#修改列表中的某一個值
print(id(h))

 

#4498034504

#4498034504

Ø  證明字典是可變類型:

h={'x':1,'y':2}
print(id(h))
h[
'x']=10
print(id(h))

 

#4363789224

#4363789224

1.2什麼是數據?

X=10 10就是我們要存儲的數據

1.3爲何數據要分不同的數據類型?

數據是用來表示狀態的,不同的狀態就應該用不同的數據去表示

1.4數據類型:

1.4.1數字(×××,長整型,浮點型,複數)

定義×××方式:

x=int(10)
print(type(x))

定義浮點型方式:

x=float(1.22)
print(type(x))

1.4.2字符串str

作用:名字,性別,國籍,地址等描述信息

定義:在單引號、雙引號、三引號內,由一串字符組成

x=str('jiang')
print(type(x))

str類型可以將任意類型轉成字符串類型:

x=str({'a':1})
print(x,type(x))

name='*egon**'
print(name.strip('*'))*號中間的部分
print(name.lstrip('*'))*號左邊的部分
print(name.rstrip('*'))*號右邊的部分  
name='egon'
print(name.lower())#變成小寫
print(name.upper())#變成大寫
name='alex_SB'
print(name.endswith('SB'))
print(name.startswith('alex'))
res='{} {} {}'.format('egon',18,'male')
res='{1} {0} {1}'.format('egon',18,'male')
res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)
#join
tag=' '
print(tag.join(['egon','say','hello','world'])) #可迭代對象必須都是字符串
#replace
name='alex say :i have one tesla,my name is alex'
print(name.replace('alex','SB',1))
#isdigit:可以判斷bytesunicode類型,是最常用的用於於判斷字符是否爲"數字"的方法
age=input('>>: ')
print(age.isdigit())

求字符串的長度:

j='asd'
print(len(j))

成員運算in和not in :判斷一個子字符換是否存在於一個大字符串中

name='my name is jiang,jiang is man'
print('jiang' in name)

移除字符串左右兩的空白:

name='    hello   '
res=name.strip('  ')
print(res)

name='***hello***'
res=name.strip('*')
print(res)

切分split:

info='root:x:0:0::/root:/bin/bash'
res=info.split(':')
print(res[0])

練習:

移除name變量對應的值兩邊的空格,並輸出處理結果

name=' aleX'
a=name.strip()
print(a)

判斷name變量對應的值是否以“al”開頭,並輸出結果

name=' aaleX'
if name.startswith(al):
    print(name)
else:
    print('no')

判斷name變量對應的值是否以“x”結尾,並輸出結果

name=' aaleX'
if name.endswith(name):
    print(name)
else:
    print('no')

name變量對應的值中的“1”替換爲“p”,並輸出結果

name=' aleX'
print(name.replace('l','p'))

name變量對應的值根據“l”分隔,並輸出結果

name=' aleX'
print(name.split('l'))

name變量對應的值變大寫,然後輸出結果

name=' aleX'
print(name.upper())

name變量對應的值變小寫,然後輸出結果

name=' aleX'
print(name.lower())

請輸出name變量的值的第2個字符

name=' aleX'
print(name[1])

請輸出name變量對應的值中“e”所在索引的位置

name=' aleX'
print(name.index('e'))

獲取子序列,去掉最後一個字符

name=' aleX'
a=name[:-1]
print(a)

1.4.3列表

作用:多個裝備,多個愛好,多門課程等

定義:[]內可以有多個任意類型的值,逗號分隔

name=['a','b','c']
print(name,type(name))

按照索引取值改值:

name=['a','b','c']
print(name)
name[-
1]='A'
print(name[-1])

增加列表的元素:

name=['a','b','c']
name.append(
'jiang')
print(name)

刪除列表的元素

name=['a','b','c']
del name[0]
print(name)
name.remove(
'b')
print(name)

切片:

name=['a','b','c']
print(name[0:2])

計算長度(就是計算列表中元素的個數):

name=['a','b','c']
print(len(name))

成員運算innot in

name=['a','b','c']
print('jiang' in name)

計算個數:

name=['a','b','c','a']
print(name.count('a'))

查看索引,默認找到第一個就返回找不到則報錯:

name=['a','b','c','a']
print(name.index('a'))

排序:

name=[11,-3,0,99,88]
name.sort()
print(name)

反轉:

name=[11,-3,0,99,88]
name.reverse()
print(name)

name=[11,-3,0,99,88]
res=name[::-
1]
print(res)

1.4.4元組

作用:存多個值,對比列表來說,元組不可變(是可以當做字典的key的),主要用來讀

定義:與列表類型比,只不過[]換成()

1.4.5字典

作用:存多個值,key-value存取,取值速度快

定義:key必須是不可變類型,value可以是任意類型

1.4.6集合

作用:去重,關係運算

定義:可變類型是不可hash類型,不可變類型是可hash類型

定義集合:在{}內用逗號隔開

x={1,3,5,6,7,1,1}
print(x)

如何造一個空集合:

x={}
print(type(x))

s=
set()
print(type(s))

x={}
print(type(x))

s=
set()
print(type(s))

長度計算

s={1,2,2,3}
print(len(s))

成員運算

s={'egon','alex','oldboy'}
print('jiang' in s)

關係運算:

python_stu=['egon','alex','kevin','王大炮','李二丫']
linux_stu=[
'張鐵蛋','劉銅蛋','趙金蛋','alex','oldboy','kevin']

res=[]
for stu1 in python_stu:
    
if stu1 in linux_stu:
        res.append(stu1)

print(res)

交集

python_stu={'egon','alex','kevin','王大炮','李二丫'}
linux_stu={
'張鐵蛋','劉銅蛋','趙金蛋','alex','oldboy','kevin'}

print(python_stu& linux_stu)

print(python_stu.intersection(linux_stu))

合集

print(python_stu | linux_stu)

print(python_stu.union(linux_stu))

差集

print(python_stu - linux_stu)

print(python_stu.difference(linux_stu))

對稱差集

print((python_stu - linux_stu) | (linux_stu - python_stu))
print(python_stu ^ linux_stu)

print(python_stu.symmetric_difference(linux_stu))

==

x={1,2,3}
y={
1,3,2}
print(x== y)

父集(>= 

s={1,2,3,4}
y={
1,2,3}
print(s>= y)

print(s.issuperset(y))

子集(<=)

s={1,2,3}
y={
1,2,3,4}
print(s<= y)

print(s.issubset(y))

1.4.7數據類型的總結:

按存儲空間的佔用從低到高

數字

字符串

集合:無序,即無序存索引相關信息

元組:有序,需要存索引相關信息,不可變

列表:有序,需要存索引相關信息,可變,需要處理數據的增刪改

字典:無序,需要存keyvalue映射的相關信息,需要處理數據的增刪改

練習

pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
print(pythons| linuxs)#求出所有報名學生名字集合
print(pythons& linuxs)#求出同時報這兩個課程的集合
print(pythons- linuxs)#求出只報了python的學生
print(pythons^ linuxs)#沒有同事報兩個課程的集合

去重:

  1. 有列表l=['a','b',1,'a','a'],列表元素均爲可hash類型,去重,得到新列表,且新列表無需保持列表原來的順序

l=['a','b',1,'a','a']
print(set(l))

  2.在上題的基礎上,保存列表原來的順序

l=['a','b',1,'a','a']
ll=[]
for iin l:
    if not in ll:
        ll.append(i)
print(ll)

利用集合

l=['a','b',1,'a','a']
ll=[]
s=set()
for iin l:
    if not in s:
        s.add(i)
        ll.append(i)
print(ll)

3.去除文件中重複的行,肯定要保持文件內容的順序不變

import os
with open('db.txt','r',encoding='utf-8'as read_f,\
     open('.db.txt.swap','w',encoding='utf-8'as write_f:
    s=set()
    for line in read_f:
        if line not in s:
            s.add(line)
            write_f.write(line)
os.remove('db.txt')
os.rename('.db.txt.swap','db.txt')

  4.有如下列表,列表元素爲不可hash類型,去重,得到新列表,且新列表一定要保持列表原來的順序

l=[

   {'name':'egon','age':18,'sex':'male'},

   {'name':'alex','age':73,'sex':'male'},

   {'name':'egon','age':20,'sex':'female'},

   {'name':'egon','age':18,'sex':'male'},

   {'name':'egon','age':18,'sex':'male'},

]

l=[
    {
'name':'egon','age':18,'sex':'male'},
    {
'name':'alex','age':73,'sex':'male'},
    {
'name':'egon','age':20,'sex':'female'},
    {
'name':'egon','age':18,'sex':'male'},
    {
'name':'egon','age':18,'sex':'male'},
]
s=
set()
ll=[]
for in l:
    val=(i[
'name'],i['age'],i['sex'])
    
if val not in s:
        s.add(val)
        ll.append(i)
print(ll)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章