python基础数据类型

一、变量、常量、注释

1.1变量

  由字母、数字、下划线组成,不能以是数字开头,不能占用python关键字
  双下划线开头,双下划线结尾是python内置变量,尽量不适用双下划线开头结尾的
  变量与变量之间不互相指,变量指向数据
  变量在内存中是唯一命名的
  中文可以设置为变量,但是不要轻易使用

推荐命名方式:
  驼峰体:第一个单词的首字母大写
   大驼峰:MyName
   小驼峰:myname
   大小驼峰的不同在于开头的单词字母大小写不同
  下划线方式:
   my_name

1.2常量

一直不变的量叫做常量
python中没有真正的常量,为了迎合其它语言,约定俗成全部大写的变量称为常量
用来设置不变的数据,如id号、已经发生的事情等

1.3注释

单行注释:#
多行注释:三个单引号或者双引号抱起来

#单行注释
'''
单引号注释
'''
=====
"""
双引号注释
"""

二、基础

2.1格式化输出

第一种格式化

py='我的名字:%s,今年:%d,我的工作:%s,今年已经过了1%%' %('天一',18,'python')
#%是占位符,%s代表字符串,%d代表数字,显示百分之几加两个
print(py)#我的名字:天一,今年:18,我的工作:python,今年已经过了1%

第二种格式化输出format
format有三种用法:

1、按照位置一一对应
s1="我是{},今年{},性别{}".format('python大牛',18,'男')
print(s1)
#我是python大牛,今年18,性别男

2、按照索引对应
s1="我是{0},今年{1},性别{2},你是{0},今年{1},性别{2}".format('python大牛',18,'男')
print(s1)
#我是python大牛,今年18,性别男,你是python大牛,今年18,性别男

3、使用变量名字对应
s1=("我是{name},今年{age},性别{sex}".format(name='python大牛',age=18,sex='男'))
print(s1)
#我是python大牛,今年18,性别男

2.2运算符

算术运算符+、-,比较运算符>==,赋值运算符=,逻辑运算符and、or,成员运算符,身份运算符

运算符符号
算术运算+,-,*,/,%(取余),//(取整),**(次方)
比较运算==(等于),!=(不等于),<>(不等于),>=(大于等于),<= (小于等于)
赋值运算=(等于),+=(自加,相当于count=count+1),-=,*=,…
逻辑运算and:和、or:或者 、not:取反

2.2.1算数运算

1、次方计算

#2的3次方
print(2**3)
#8

2、取余

print(10%3)
#1

3、取整

print(10//3)
#3

2.2.2赋值运算

先算等号右面的,然后再算等号左面的

count=0
count+=5#相当于count = cpunt+5,相当于0+5
print(print(count))#5

2.2.3比较运算

比较运算的结果是布尔:True (真)或者False(假)

print(5>6)
print(5<6)
print(5==6)
print(5!=6)
print(5>=6)
print(5<=6)
# False
# True
# False
# True
# False
# True

2.2.3逻辑运算

  逻辑运算优先级:在没有()的情况下,优先级:not>and>or,同一优先级从左到右依次计算
  x or y , x为真,值就是x,x为假,值是y;
  x and y, x为真,值是y,x为假,值是x。

print(2>1 and 3<4 )
print(3<4 or 4>5 )
print(2>1 and 3<4 or 4>5 and 2<1)
print(True or False)
print(0 or 1)
print(1 or 0)
print(3 or 4)
print(4 or 3)

# True
# True
# True
# True
# 1
# 1
# 3
# 4

2.3类型转换

2.3.1 str-int

1、字符串转化整数:只能是纯数字组成的字符串

s1='0100'
n1=int(s1)
print(n1,type(n1))
#100 <class 'int'>

2、整数转化字符串

s1=100
n1=str(s1)
print(n1,type(n1))
#100 <class 'str'>

2.3.2bool-int

  所有的数据都可以转化成布尔值

1、整数转化布尔值:非零即True,0为False

n1=0
n2=100
n3=200
print(bool(n1))
print(bool(n2))
print(bool(n3))
# False
# True
# True

2、布尔值转化数字:只有1和0

n1=True
n2=False
print(int(n1))
print(int(n2))
# 1
# 0

3、字符串转化布尔值,非空位True,空格也是字符,布尔值转化字符串意义

n1=''#这里啥都没有
n2=' '#这里有个空格
print(bool(n1))
print(bool(n2))
# False
# True

2.3.2 str-boot

字符串转化布尔值,非空及true
只有变量值里面啥都没有(空格也不行)的时候才是False
布尔值加上引号就是字符串,基本没有意义

a='我是python大牛'
print(bool(a))
#True

```python
a=''
print(bool(a))
#False

三、基础数据类型

  数据类型就是计算机用来对数据的分类
  python中一共有八中数据类型

类型简介
number数字
string字符串
bool布尔
None空值
list列表
tuple字典
dict元祖
set集合

2.1 int整形

​python3中只有int一种数字类型
数字:1、2、3、4等等
取值范围:32位电脑上是-231~2 31-1,64位电脑是-263~263-1

num1=100
print(num1)
#100

2.1.1二进制转十进制

1、二进制00101010转十进制
计算方式:位上的数乘以2的x次方(x是第几位就是几)

#00101010转十进制
num1=0*2**0+1*2**1+0*2**2+1*2**3+0*2**4+1*2**5+0*2**6+0*2**7
print(num1)
#42

2.1.2统计有效的二进制位数:bit_lenth

#十进制转化成二进制的位数
num1=100
print(num1.bit_length())
#7

2.3str字符串

在python中,凡是用引号引起来的数据就称为字符串
有单引号,双引号,三引号(三对单引号或双引号)
存储少量数据,对其的任何操作获取的内容都是str类型,存储数据单一

s1='你好'
s2="你好"
s3='''你好'''
s4="""你好"""
s5="""你好
    世界
    """
#三个单引号或双引号赋值给变量就是字符串,否则就是注释

单双引号可以配合使用,因为有的地方可能是用英文单词缩写

s1="I'm python大牛"
s2='I'm python大牛'#单引号就会识别出错

2.3.1字符串之间拼接

s1="我是"
s2='python大牛'
s3=s1+s2
print(s3)#我是python大牛

2.3.2 str与int相乘

s1="我是"
s2=3
s3=s1*s2
print(s3)#我是我是我是

2.3.3索引

字符串从左到右是有顺序的,叫下标(索引)
从左到右第一个字符是索引0,第二个是1,依次类推
对字符串进行索引、切片出来的数据都是字符串类型

1、索引

1、按索引值取值,正取
s1="我是python大牛"
s2=s1[0]
print(s2)#我

2、按索引值取值,倒取,-1是最后一个,-2-3依次往前
```python
s1="我是python大牛"
s2=s1[-1]
print(s2)#牛

2.3.4切片

切片:顾头不顾尾,根据索引取值([0-3],从0索引开始取,取不到3)
切片步长: [开始索引:结束索引:步长]
在开头取的话,0可以省略,默认从头开始,结束索引不写默认全部,步长默认是1,从左到右的顺序

1、顾头不顾尾

1、索引
s1="我是python大牛"
s2=s1[0:2]
print(s2)#我是

2、 在开头取的话,0可以省略

s1="我是python大牛"
s2=s1[:2]
print(s2)#我是

2、步长用法

s1="我是python大牛"
s2=s1[0:5:2]
#步长2就是隔一个取一个
print(s2)#我pt

3、倒着取

s1="我是python大牛"
s2=s1[-1::-1]
print(s2)#牛大nohtyp是我

2.3.5 upper-lower大小写转换

upper:英文字母全部变大写
lower:英文字母全部变小写
字符串的任何操作方法不会对原字符串进行任何操作,而都是产生一个新的字符

1、变大写
s1="我是python大牛"
s2=s1.upper()
print(s2)#我是PYTHON大牛

2、变小写
s1="我是python大牛"
s2=s1.lower()
print(s2)#我是python大牛

常见应用:输入验证吗的时候不区分大小写

code='qwer'
your_code=input('请输入验证码,不区分大小写:')
if your_code==code.lower() or your_code==code.upper():
    print("验证码输入正确")
else: print('验证码输入有误')

2.3.6startswith

判断一个字符串以什么开始,可以是一个或多个字符,返回的是布尔值

s1="我是python大牛"
s2=s1.startswith('我')
print(s2)#True

2.3.7endswith

判断一个字符串以什么结束,可以是一个或多个字符,返回的是布尔值

s1="我是python大牛"
s2=s1.endswith('大牛')
print(s2)#True

2.3.8replace

replace(旧内容,新内容,替换次数(不写默认全部替换,超出范围不报错,超出范围也是所有))
缺点:从前往后按顺序替换

在这里插入图片描述

s1="我是python大牛我是python大牛"
s2=s1.replace('我','你')
print(s2)
#你是python大牛你是python大牛

2.3.9 strip-len

空白去除,包括\n,\t,空格,tab等,也可以去除指定位置的字符,前后一起进行匹配,中间的无法消除
len:获取可迭代对象元素的总个数

1、去除空白
s1="   我是python大牛   "
print(len(s1))#16
s2=s1.strip()
print(s2,len(s2))#我是python大牛 10

2、去除指定的字符
s1="我是python大牛"
s2=s1.strip('我是大牛')
print(s2)#python

2.3.10split

分割,默认按照空格进程分割,返回一个列表,某些时候就是字符串转化列表
可以指定分隔符进行分割,以及分割次数

1、默认切割
s1="天一 天二 天三"
s2=s1.split()
print(s2)#['天一', '天二', '天三']

2、指定分割符
s1="天一:天二:天三"
s2=s1.split(':')
print(s2)#['天一', '天二', '天三']

3、根据索引指定分割次数
s1="天一:天二:天三"
s2=s1.split(':',1)
print(s2)#['天一', '天二:天三']

2.3.11 join

对可迭代对象进行连接,结果是字符串类型

1、单个字符串
s1="我是python大牛"
s2='-'.join(s1)
print(s2)
#我-是-p-y-t-h-o-n-大-牛

2、多个字符串
s1="天一",'天二','天三'
s2=':'.join(s1)
print(s2)#天一:天二:天三
#这种方法前提里面的元素必须都是字符串类型

3、列表中的字符串
s1=['天一','天二','天三']
s2=':'.join(s1)
print(s2)#天一:天二:天三
这种方法前提列表里面的元素必须都是字符串类型

2.3.12count

计算出现的次数

s1="我是python大牛我是python大牛"
s2=s1.count('python')
print(s2)#2

2.3.13 is

isalnum :判断是不是由字母或数字组成
isalpha :字符串只由字母组成
isdecimal:字符串只由十进制组成

1、判断是不是由字母或数字组成

s1=('python123')
s2=s1.isalnum()
print(s2)#True

2、字符串只由字母组成

s1=('python')
s2=s1.isalpha()
print(s2)#True

3、字符串只由十进制组成

s1=('123456789')
s2=s1.isdecimal()
print(s2)#True

2.3.14in/not in

in/notin:在/不在
1、in用法

s1="我是python大牛"
s2='python' in s1
print(s2)#True

2、not in用法

s1="我是python大牛"
s2='python' not in s1
print(s2)#False

2.3.15capitalize

capitalize,首字母大写,其余变小写

s1="pythON"
s2=s1.capitalize()
print(s2)#Python

2.3.16swapcase

swapcase,大小写翻转

s1="pythON"
s2=s1.swapcase()
print(s2)#PYTHon

2.3.17title

每个单词首字母大写(字母之间只要不连续,空格数字都算)
s1=“wo shi python daniu”
s2=s1.title()
print(s2)#Wo Shi Python Daniu

2.3.18center

center,居中
center(长度,填充(默认填充空白))

s1="wo shi python daniu"
s2=s1.center(50,'*')
print(s2)
#***************wo shi python daniu****************

2.3.19find

find,通过元素找索引,找到第一个就返回,找不到就返回-1

s1="我是python大牛"
s2=s1.find('大')
print(s2)#8

2.3.20index

index,通过元素找索引,找不到就报错

s1="我是python大牛"
s2=s1.index('我')
print(s2)#0

2.4 bool布尔

布尔只有两种结果:Ture,False
True为真,False为假

s1=1
s2=2
print(s1>s2)#False
print(s1<s2)#True

2.5 list列表

存放数据,元素可变
列表是有序的、可索引、切片(步长)的
python容器型数据类型,列表里面是什么类型,数据就是什么类型
可以对列表进行索引,切片,增删改查等,容器型的数据都可以

1列表操作

1、索引

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
print(l1)
#['我是python大牛', True, 100, ['我是python大牛', True, 100]] <class 'list'>

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
print(l1[0])
print(l1[-1])
#我是python大牛
#['我是python大牛', True, 100]

2、切片

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
print(l1[0:2:])

3、复合索引
取嵌套中的数据

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
print(l1[-1][-1])
#100

2列表创建

1、直接创建

l1=['我是python大牛',True,100,['我是python大牛',True,100]]

2、迭代创建

l1=[]
l1=list('我是python大牛')
print(l1)
#['我', '是', 'p', 'y', 't', 'h', 'o', 'n', '大', '牛']

3、列表推导式

l1=[i for i in range(1,10)]
print(l1)
#[1, 2, 3, 4, 5, 6, 7, 8, 9]

3列表的增

1、append:在末尾追加

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l1.append(100)
print(l1)
#['我是python大牛', True, 100, ['我是python大牛', True, 100], 100]

2、insert:插入数据
insert(索引位置,插入的数据)
不覆盖内容,在相应的位置上插入数据

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l1.insert(1,1000))
print(l1)
#['我是python大牛', 1000, True, 100, ['我是python大牛', True, 100]]

3、extend
迭代追加,最小元素追加

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l1.extend([100,200])
l1.extend('woshi')
print(l1)
#['我是python大牛', True, 100, ['我是python大牛', True, 100], 100, 200, 'w', 'o', 's', 'h', 'i']

4列表的删

1、pop按照索引删除

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l1.pop(0)
print(l1)
#[True, 100, ['我是python大牛', True, 100]]

2、remove,按照指定元素删除,如果有重名,删除从左数第一个

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l1.remove(100)
print(l1)
#['我是python大牛', True, ['我是python大牛', True, 100]]

3、del按照索引删除与切片删除

1、按照索引删除
l1=['我是python大牛',True,100,['我是python大牛',True,100]]
del l1[0]
print(l1)
#[True, 100, ['我是python大牛', True, 100]]

2、按照切片删除
l1=['我是python大牛',True,100,['我是python大牛',True,100]]
del l1[0:2]
print(l1)
#[100, ['我是python大牛', True, 100]]

4、clear,清空整个列表

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l1.clear()
print(l1)

5、循环删除(删除问题)

列表的索引是连续的,删除中间的元素,删除元素,索引不会删除,后面的往前补上,每删除一个元素,后面的索引和元素都会前进一位
循环删除按照索删除的话注意,删除的时候尽量倒着删除不影响
倒叙删除虽然元素和索引前进,但是我们是先删除在变化的,依次往前,所以变化不影响操作

删除索引数奇数所对应的元素
1、理论的删除

l1=[1,2,3,4,5,6]
for i in l1:
    print(i)
    if i%2==1:
        l1.pop(i)
print(l1)#[1, 3, 4, 6]

在这里插入图片描述
2、真正的删除

方法一:直接删除
l1=[1,2,3,4,5,6]
del l1[1::2]
print(l1)#[1, 3, 5]
方法二:倒叙删除
l1=[1,2,3,4,5,6]
for i in range(len(l1)-1,0,-1):
    print(i)
    if i%2==1:
        l1.pop(i)
print(l1)#[1, 3, 5]
方法三:置换
l1=[1,2,3,4,5,6]
l2=[]
for i in range(len(l1)):
    print(i)
    if i%2==1:
        l2.append(l1[i])
l1=l2
print(l1)

5列表的改

1、按照索引修改

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l1[0]='pytohn'
print(l1)
#['pytohn', True, 100, ['我是python大牛', True, 100]]

2、按照步长修改

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l1[0:2]='1234'
print(l1)
#['1', '2', '3', '4', 100, ['我是python大牛', True, 100]]

6列表的查

1索引

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l2=l1[0]
print(l2)#['我是python大牛', True, 100]
l2=l1[-1]
print(l2)#我是python大牛

2、切片

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l2=l1[0::2]
print(l2)#['我是python大牛', 100]

7列表嵌套

修改嵌套列表中的内容

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l1[-1][1]=100
print(l1)#['我是python大牛', True, 100, ['我是python大牛', 100, 100]]

在这里插入图片描述

8其他操作

1、count统计列表的某个元素出现的次数

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l2=l1.count(100)
print(l2)

2、index从列表中找出某个值第一个匹配项的索引位置

l1=['我是python大牛',True,100,['我是python大牛',True,100]]
l2=l1.index(100)
print(l2)#2

3、sort,对原列表进行排序,默认从小到大
reverse,将列表中的元素反向存放

l1=[1,2,3,4,5]
l1.sort()#默认从小到大
print(l1)#[1, 2, 3, 4, 5]
l1.sort(reverse=True)#从大到小,reverse(方法将列表中的元素反向存放)
print(l1)#[5, 4, 3, 2, 1]

4、列表相加

l1=[1,2,3,4,5]
l2=[6,7,8,9,10]
l3=l1+l2
print(l3)#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

5、列表与整数相乘

l1=[1,2,3,4,5]
l2=l1*3
print(l2)#[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

9列表拆包

列表的拆包,分别赋值,必须一一对应,多了少了都不行

l1,l2=['我是python大牛',True]
print(l1)#我是python大牛
print(l2)#True

10 range

range:数字范围的列表,里边必须是数字
语法:range(开始数字,结束数字,步长)
range经常与for循环结合获取索引

l1=range(10)
print(l1)#range(0, 10),里面的数字是从0-9,顾头不顾尾
for i in l1:
    print(i)

1、索引

l1=range(10)
print(l1[1])

2、切片

l1=range(10)
for i in range(1,10,2):
    print(i)

3、获取索引

l1=['我是python大牛',True,100]
for i in range(len(l1)):
    print(i)

2.6 tuple元祖

元祖只能查,不能增删改,可以对里面的列表进行元素的修改,可以索引、切片(步长),但是列表不能删除
存放数据,元素不可变,存放重要信息

1元组的查

1、索引查看

l1=('我是python大牛',True,100,['我是python大牛',True,100,])
l2=l1[0]
print(l2)#我是python大牛

2、切片查看

l1=('我是python大牛',True,100,['我是python大牛',True,100,])
l2=l1[0:3]
print(l2)

3、获取元素个数

l1=('我是python大牛',True,100,['我是python大牛',True,100,])
l2=len(l1)
print(l2)

4、修改元组中列表的内容

将列表中的True修改为False
l1=('我是python大牛',True,100,['我是python大牛',True,100,])
l2=l1[-1][1]=False
print(l1)#('我是python大牛', True, 100, ['我是python大牛', False, 100])

2元组拆包

元组的拆包,分别赋值,必须一一对应,多了少了都不行

l1,l2=('我是python大牛',True)
print(l1)
print(l2)

3元组特性

python中元组有一个特性,元组中如果只含有一个元素且没有逗号,则该元组不是元组,与改元素数据类型一致,如果有逗号,那么它是元组

l1=('我是python大牛')
print(l1,type(l1))#我是python大牛 <class 'str'>
l1=('我是python大牛',)
print(l1,type(l1))#('我是python大牛', ) <class 'tuple'>

2.7 dict字典

数据类型的分类:(可变与不可变)
可变(不可哈希)的数据类型:list,dict,set
不可变(可哈希)的数据类型:str,bool,int,tuple

字典存放关联型数据,查询速度快 ,元素可变,容器型数据类型
列表的查询速度很慢,关联性不强
字典:{‘readme’:{‘name’:‘python大牛’}},以键值对存储的容器型数据类型,冒号前面是键,后面是值,放在一起是一组键值对
字典的键类似索引,可以通过键对字典进行取值
键必须是不可变的数据类型:str, int,tuple bool,值可以是任意数据类型对象,唯一,不唯一取最后面的
优点:查询速度非常快,存储关联性的数据,导致以空间换时间
有时增就是改改就是增

1字典的创建方式

1、直接创建
dic={'name':'python大牛'}
print(dic)#{'name': 'python大牛'}
2、内置函数dict,里面放元组,元组里面放小元组
dic=dict((('name','python大牛'),('age',18)))
print(dic)#{'name': 'python大牛', 'age': 18}
3、内置函数dict
dic=dict(name='python大牛',age=18)
print(dic)#{'name': 'python大牛', 'age': 18}
4、内置函数dict
dic=dict({'name':'python大牛','age':18})
print(dic)#{'name': 'python大牛', 'age': 18}
5、内置函数dict+zip
dic=dict(zip(['naem','age'],['我是python大牛',18]))
print(dic)#{'name': 'python大牛', 'age': 18}
6dict
dic={k : v for k,v in [('naem','python大牛'),('age',18)]}
print(dic)#{'name': 'python大牛', 'age': 18}
7dict
fromkeys:字典的所有键来自一个可迭代对象,字典的值使用同一个值
dic=dict.fromkeys('name','python大牛')
print(dic)#{'n': 'python大牛', 'a': 'python大牛', 'm': 'python大牛', 'e': 'python大牛'}
8等等

2字典的增

1、增加键,如果键存在,则是修改,不存在则是增加

dic={'name':'python大牛','age':'18','sex':'男'}
dic['爱好']='女'
print(dic)#{'name': 'python大牛', 'age': '18', 'sex': '男', '爱好': '女'}

2、setdefault,有则不变,无则增加

dic={'name':'python大牛','age':'18','sex':'男'}
dic.setdefault('爱好','女')
dic.setdefault('name','python')
print(dic)#{'name': 'python大牛', 'age': '18', 'sex': '男', '爱好': '女'}

3、update增

dic={'name':'python大牛','age':'18','sex':'男'}
dic.update(爱好='玩')
print(dic)#{'name': 'python大牛', 'age': '18', 'sex': '男', '爱好': '玩'}

3字典的删

pop,按照键删除键值对,有返回值,可以设置第二个参数,无论字典中有无此键,都不会报错,存在这个键,就返回删除的内容,否则就是你设置的参数内容

1、pop删除

dic={'name':'python大牛','age':'18','sex':'男'}
dic.pop('name')
print(dic)#{'age': '18', 'sex': '男'}
=====
dic={'name':'python大牛','age':'18','sex':'男'}
l1=dic.pop('naxdf','不存在')
print(l1)#不存在
print(dic)#{'name': 'python大牛', 'age': '18', 'sex': '男'}

2、clear清空

dic={'name':'python大牛','age':'18','sex':'男'}
dic.clear()
print(dic)#{}

3、del,按照键去删除,不存在就报错

dic={'name':'python大牛','age':'18','sex':'男'}
del dic['name']
print(dic)#{'age': '18', 'sex': '男'}
del dic['name']
print(dic)#KeyError: 'name'

4字典的改

1、直接给键赋值

dic={'name':'python大牛','age':'18','sex':'男'}
dic['name']='python'
print(dic)#{'name': 'python', 'age': '18', 'sex': '男'}

2、update

1改
dic={'name':'python大牛','age':'18','sex':'男'}
dic.update(name='python',age=20)
print(dic)#{'name': 'python', 'age': 20, 'sex': '男'}

2、增
dic={'name':'python大牛','age':'18','sex':'男'}
dic.update(爱好='玩')
print(dic)#{'name': 'python大牛', 'age': '18', 'sex': '男', '爱好': '玩'}
3、增改
dic={'name':'python大牛','age':'18','sex':'男'}
dic.update([('爱好','玩'),('身高',180)])
print(dic)#{'name': 'python大牛', 'age': '18', 'sex': '男', '爱好': '玩', '身高': 180}
4、增
dic1={'name':'python大牛','age':'18','sex':'男'}
dic2={'name':'python','age':20}
dic1.update(dic2)
print(dic1)#{'name': 'python', 'age': 20, 'sex': '男'}
print(dic2)#{'name': 'python', 'age': 20}

5字典的查

1、根据键去查询,不存在就报错

dic={'name':'python大牛','age':'18','sex':'男'}
l1=dic['name']
print(l1)#python大牛

2、get,可以设置返回值,有此键返回键的值,没有返回设置的值,默认是none

dic={'name':'python大牛','age':'18','sex':'男'}
l1=dic.get('name','不存在')
print(l1)#python大牛
l1=dic.get('100','不存在')
print(l1)#不存在

3、keys(),获取所有的键

dic={'name':'python大牛','age':'18','sex':'男'}
l1=dic.keys()
print(l1)#dict_keys(['name', 'age', 'sex'])

4、values(),获取所有的值

dic={'name':'python大牛','age':'18','sex':'男'}
l1=dic.values()
print(l1)#dict_values(['python大牛', '18', '男'])

5、items(),以列表里面包含元组显示键和值

dic={'name':'python大牛','age':'18','sex':'男'}
l1=dic.items()
print(l1)#dict_items([('name', 'python大牛'), ('age', '18'), ('sex', '男')])

6、字典的拆包

dic={'name':'python大牛','age':'18','sex':'男'}
for key,values in dic.items():
    print(key,values)
'''
name python大牛
age 18
sex 男
'''   

6字典的嵌套

将age=18,修改为age=20

dic={'个人信息':{'name':'我是python大牛','age':18}}
dic['个人信息']['age']=20
print(dic)#{'个人信息': {'name': '我是python大牛', 'age': 20}}

7循环字典

1、循环字典

dic={'name':'python大牛','age':'18','sex':'男'}
for i in dic:
    print(i)
'''
name
age
sex'''

2、循环一个字典时,如果改变一个字典的大小(增加或删除),就会报错

dic={'name':'python大牛','age':'18','sex':'男'}
for i in dic:#RuntimeError: dictionary changed size during iteration
    dic['爱好']='python'
    print(i)
print(dic)

3、在循环的时候怎样去做呢

dic={'name':'python大牛','age':'18','sex':'男'}
l1=[]
for i in dic:
    if i == 'name':
        l1.append(dic)

for i in l1:
    dic['爱好']='python'
print(dic)#{'name': 'python大牛', 'age': '18', 'sex': '男', '爱好': 'python'}

2.8 set集合

set集合,容器型数据类型,她要求里面的元素是不可变的,但是它本身是可变的数据类型;集合是无序的,{}里面放元素就是集合,放键值对就是字典
作用:列表去重;关系测试(交集、并集、差集…)

1创建

set1={'我是python大牛',True,100,100}
print(set1,type(set1))#{'我是python大牛', True, 100} <class 'set'>

2空集合

dic={}#空字典
s=set()#空集合
print(dic,type(dic))#{} <class 'dict'>
print(s,type(s))#set() <class 'set'>

3集合的增

1、add,直接增加

set1={'我是python大牛',True,100,}
set1.add(1000)
print(set1)#{1000, True, '我是python大牛', 100}

2、update()迭代更新并去重

set1={'我是python大牛',True,100,}
set1.update('pythonpython')
print(set1)#{True, 'n', 100, 't', 'h', 'o', '我是python大牛', 'y', 'p'}

4集合的删

1、remove()按照元素删除

set1={'我是python大牛',True,100,}
set1.remove(100)
print(set1)#{'我是python大牛', True}

2、pop(随机删除)

set1={'我是python大牛',True,100,}
set1.pop()
print(set1)#{'我是python大牛', 100}

5集合的改

集合不能直接改,只能变相改,先删除了,在增加

set1={'我是python大牛',True,100,}
set1.remove(100)
set1.add(200)
print(set1)#{'我是python大牛', True

6其他

1、交集(&或者intersection)
两个都有的元素就是交集

set1={'我是python大牛',True,100,200,300}
set2={'我是python大牛',True,100,200}
print(set1 & set2)#{200, True, 100, '我是python大牛'}

2、并集(|或者union)
数据集合到一起就是并集

set1={'我是python大牛',True,100,200,300}
set2={'我是python大牛',True,100,200}
print(set1 | set2)#{True, 100, 200, 300, '我是python大牛'}

3、差集(-或者difference)
我有你没有的,我差你就是我有你没有

set1={'我是python大牛',True,100,200,300}
set2={'我是python大牛',True,100,200}
print(set1 - set2)#{300}

4、反交集(^或者symmetric_difference)
除了交集所有的

set1={'我是python大牛',True,100,200,300}
set2={'我是python大牛',True,100,200}
print(set1 ^ set2)#{300}

5、子集与超集
子集:我包含你,你就属于我,你就是我的子集
超集:我包含你,我就是你的超集

7去重

l1=[1,2,3,1,2,3]
l2=set(l1)
print(l2)#{1, 2, 3}

2.9数据类型分类

容器类型:列表、元祖、字典
可变:列表、字典
不可变:数字,字符串,元组,布尔值
直接访问:数字
顺序访问:字符串、列表、元祖
key值访问:字典

按存储空间划分:(从低到高)
数字
字符串
集合:无序,即无序存索引相关信息
元组:有序,需要存索引相关信息,不可变
列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
字典:有序,需要存key与value映射的相关信息,可变,需要处理数据的增删改(3.6之后有序)

四、其他基础

1、id

id:唯一标识
开辟的数据占用空间,空间在内存中有有对应的内存地址
使用id可以获取内存地址,到的的数字是随机的;内存是临时加载数据,运行完就消失了
id唯一,相同就是一样的
python的id是虚拟的,目的是让你查看是不是同一个
id相同,值一定相同,值相同,id不一定相同

dic={'name':'python大牛','age':'18','sex':'男'}
print(id(dic))#1955228316672
l1=100
l2=200
print(id(l1))#2273801164240
print(id(l2))#2273801167504

2、is

1判断内存地址是否相等

l1=100
l2=200
print(l1 is l2)#False

l1=100
l2=100
print(l1 is l2)#True

==

判断两边的数据是否相等,返回Ture或者False

s='我是python大牛'
g='我是python大牛'
print(g==s)#True

3代码块

python程序由代码块构成,一个模块,一个函数,一个类,一个文件等都是一个代码块
交互方式输入的每一个命令都是一个代码块

同一代码块的机制

两个机制:同一个代码块下,有一个机制,不同的代码块下,遵循另一个机制

  • 同一个代码块下的缓存机制,也叫字符串驻留机制

前提:同一个代码块内
python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把l1,l2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即:id相同。

目的:节省内存,提升性能
适用对象:int(float)、bool、srt
具体规则:所有的数字,bool,几乎所有的字符串
在这里插入图片描述

不同代码块的机制

  • 不同代码块下的缓存机制:小数据池

不在统一代码块
在内存中提前开辟好了一定范围数字或一定规则的字符串
适用对象:int(float)、bool、srt
具体规则:-5-256数字,bool,满足规则字符串
优点:提升性能,节省内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅水鲤鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值