python自学之路(一)数据结构

==# ==变量

  • 在程序的运行过程中,变量值可以发生改变
  • 变量先定义再使用

标识符 命名规范

  • 数字 字母下划线组成
  • 不能以数字开头
  • 不能使用系统关键字
  • 查看关键字:

    import keyword #导入库
    print(keyword.kwlist)

变量的命名规范:

  1. 见名识意
  2. 尽量用英文
  3. 采用驼峰命名法或者是下划线

    num1 = num2 = 20 统一赋值
    num1,num2 = 10,20 对称赋值

输入和输出

  • 输出: print() 逗号会输出一个空格 strings=input(提示信息)
    strings就是用户输入的信息被保存

单位换算

1bit

8bit == 1字节

1024字节 == 1M

1024M == 1G

1024G == 1T

计算机存储 0和1

进制间转化

二转十:按次幂乘然后相加

十转二:倒除法 余数逆序相加

八转二:一转3位 八进制的一位相当于二进制的三位

十六转二:一转四位

二转八:三位一取 低位开始取 高位不够补0

二转十六:四位一取


定义常量

标识符全大写

【注】 python中没有严格意义语法规定定义常量,默认使用全大写来定义 常量是在程序的运行过程中其值不可改变的量

数据类型:使用type()获取数据类型

  1. int 整型
  2. float 浮点型
  3. bool 布尔型

python中产生false的情况

False None 空字符串 空列表[] 空字典{} 空元组()

4.complex 复数类型

实数和虚数都是浮点型

函数名 意义
pow 次方
sqrt 开方
max 最大值
min 最小值
random 随机数
round 四舍五入
floor 向下取整
ceil 向上取整

None类型

None是python里面特殊的数据类型,None不是0

出现None类型的是时候 最经常就是函数没有返回值的时候

None和任何的数据类型做比较 返回值都是False

字符串类型

  • 不能使用str做变量名
  • 用单引号和双引号包含起来的就是字符串
  • 双引号中不能使用双引号,单引号里不能使用单引号
  • 加号可以做拼接使用 【注】左右两边都是字符串
  • 乘号可以重复当前字符串
  • 字符串只能通过key取值 不能通过Key来修改值

字符串的下标 截取

索引值(key)开始从0开始 末尾为-1

str[开始位置:结束位置:步长]  步长-1间隔取

#截取 str1[开始位置:结束位置]

#只取结束位置 默认从0开始取到结束下标

#同理只给开始位置
默认从开始位置(包含开始位置的值)取到结束位置

#不给值的时候默认取全部

#步长为-1时翻转

字符串的转义

转义字符 转义后
\’ ’
\” ”
\n 换行
\t 水平制表符

字符串的格式化

格式化字符 意义
%s 给字符串占位
%d 给整数占位
%o 以八进制打印
%x 以十六进制进制打印
%10d 十位整数 补空格
%010d 十位整数 补0
%f 给浮点型占位默认是保留6位小数
%.2f 保留两位
%10.2f 一共10位 保留两位 前边用空格补
%010.2f 同上 前边用0补

如果占位原来就有% 那就使用%% 输出一个

使用字符串的【str.format()】格式化输出(映射)

print('阿郎你前女友的名字叫%(name)s,现女友姓名不详性别不详年龄%(age)d,身高不想%(hei)d' % {'hei':160,'name':'nana','age':18})
print('daishu%(name)s,daxiang%(name)s' % {'name':'sdf'})

print('{}气冲冲的从{}走出来,{}问你咋啦,袋鼠说{}非要存包'.format('daishu','chaoshi','daxiang','mmp'))

print('{2}气冲冲的从{1}走出来,{0}问你咋啦,袋鼠说{2}mmp非要存包'.format('daishu','chaoshi','daxiang'))

print('信{name}没坎坷{qianfang}一溜小平坡'.format(name='meili',qianfang='前方'))

关键字 作用 关键字 作用
isnumeric 判断字符串是否是数字 replace 替换
join 以指定的分隔符来分割字符串 find 查找
center 按指定字符填充成一个新的字符串 rfind 从右往左
ljust 左对齐方式填充 upper 大写
rjust 右对齐方式填充 lower 小写
lstrip 删除左边指定字符(空白) index 查找指定字符串的索引值
rstrip 删除右边指定字符(空白) title 每个单词首字母大写
eval 将表达式作为结果计算 strip 删除两边指定字符(空白)

str2 = '12345'

print(str2.isnumeric())

str1 = 'hhhh'

print(str1.center(10,*))  //***hhhh***


#字符串前加r 防止特殊字符转义

str3 = r'c: \user\asdsa''

数据类型

列表类型(有序的数据的集合)

定义:使用[]定义一个列表,列表里面的值可以是

1. 定义一个空列表[]
2. 下标可以读取列标识 classList[0]
3. 也有同字符串的切片截取 eg:classList[:3]
4. 可以通过下标修改值,但不可以越界
5. 列表可以对称赋值 [num1,num2] = [num2,num1]
6. 列表的删改查  del列表元素,对应下标赋值

列表函数名 作用
len 列表,字符串长度
count 统计某个值在列表中出现的次数
extend 列表中追加值
insert 指定位置插入值
pop 将列表最后一个元素弹出
remove 将列表中匹配到指定元素的第一个移除
reverse 将原列表反转
clear 将原列表清空
append 列表添加元素
sort 升序

myList = ['a','b','c']
#列表中追加值
print(myList.extend(['f','g']))

print(myList.insert('w','t'))  #在下标为2的位置插入w,t
print(myList)
结果:['a','b','w','t',c']

在python里 不是以变量名来存储地址 而是以值来存储地址

num = 5
num2 = 5
print(id(num))
print(id(num2))   #以值来存储  所以指向一样
num2 = 10
print(id(num))
print(id(num2))    #num2的值修改后  指向发生改变

浅拷贝(指向是一个地址)

myList = [1,3,4,6]
myList2 = myList
myList2[0] = 'a'
print(id(myList))
print(id(myList2))
print(myList)
print(myList2)

#结果:
43484872
43484872
['a', 3, 4, 6]
['a', 3, 4, 6]

深拷贝(字面上真正意义的拷贝)

myList3 = ['a','b','c']
myList4 = myList3.copy()
myList4[0] = '1'
print(id(myList3))
print(id(myList4))
print(myList3)
print(myList4)

结果:
43615944
43616136
['a', 'b', 'c']
['1', 'b', 'c']

模块中的copy.copy只拷贝一层 也叫浅拷贝

myList = ['1','a','f']
myList2 = copy.copy(myList)
myList[0] = 'd'
print(id(myList))
print(id(myList2))
print(myList)
print(myList2)

结果:
43353800
43353992
['d', 'a', 'f']
['1', 'a', 'f']

myList = ['1','a','f',['df','fg']]
myList2 = copy.copy(myList)
myList[3][0] = 'd'
print(id(myList))
print(id(myList2))
print(myList)
print(myList2)

结果:
36079496
36080776
['1', 'a', 'f', ['d', 'fg']]
['1', 'a', 'f', ['d', 'fg']]

深拷贝

myList = ['1','a','f',['df','fg']]
myList2 = copy.deepcopy(myList)
myList[3][0] = 'wwww'
print(myList)
print(myList2)

结果:
['1', 'a', 'f', ['wwww', 'fg']]
['1', 'a', 'f', ['df', 'fg']]

【注】Python中,对象的赋值都是进行对象引用(内存地址)传递

【注】浅拷贝会创建一个新的对象,但是,对于对象中的元素,浅拷贝就只会使用原始元素的引用(内存地址)


总结一下,当我们使用下面的操作的时候,会产生浅拷贝的效果:

  • 使用切片[:]操作
  • 使用工厂函数(如list/dir/set)
  • 使用copy模块中的copy()函数

==用法==

  1. Python中对象的赋值都是内存地址传递(改一个全改,id相同)
  2. 使用copy(),对象不嵌套深拷贝(改哪个变哪个),列表嵌套的话是浅拷贝(改一个全改)
  3. 使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用(内存地址传递).
  4. 如果需要复制一个容器对象,以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝
  5. 对于非容器类型(如数字、字符串、和其他’原子’类型的对象)没有被拷贝一说
  6. 如果元祖变量只包含原子类型对象,则不能深拷贝

元组

  1. 元组的值不能进行修改
  2. 值为列表时 列表中的值可以修改
  3. 可以根据下标取值 也可以下标切片截取,与字符串和列表相似
  4. 也有+和* 功能相同
  5. del 不可以删除指定下标值 可以直接删除所有
  6. in可以判断值是否存在于元组中

集合 set

  1. 不能用{}来定义一个空的集合 用==set2 = set()== 来定义空集合
  2. 集合元素不重复
  3. 不能使用+和*

    myList = [1,3,5,7,7]
    print(set(myList))

    结果:[1,3,5,7]

    set1 = {‘a’,’b’,’c’}
    set2 = {‘d’,’e’,’a’,’w’}

    差集

    print(set1 - set2)

    并集

    print(set1 | set2)

    交集

    print(set1 & set2)

    不同时存在

    print(set1 ^ set2)

字典

  1. 字典类型 是有key->value的形式组成 并且查找速度很快
  2. 定义 {}

    dict1 = {‘name’:’aa’,’age’:1}
    classList = {‘bb’:90,’ww’:92}

  3. 下标是由字符串和整数组成

  4. 键值成对出现 下标唯一

    通过下标查询
    classList[‘name’]
    修改
    classList[‘name’] = ‘qwe’
    删除
    del classList[‘name’]
    查找
    print(classList.get(‘aa’)) #下标存在 返回值 不存在显示None
    classList.keys() #取出当前字典数据中的所有key
    classList.values() #取出当前字典中所有的value
    classList.pop(87) #通过key弹出value

    字典函数 作用
    update 合并字典相同的键覆盖
    keys 取出所有key
    values 取出当前字典中所有的value
    pop 通过key弹出value
    get 查询

数据类型转换

str1 = str(10.45) 转字符串
str2 = int('10')  转整型
str3 = float('10') 转浮点型
list() 转成列表

转换函数 作用
bool 转换为布尔类型
int 转换为整数类型
str 转换为字符类型
float 转换为浮点类型
dict 转换为字典类型
set 转换为集合类型
list 转换为列表类型
tuple 转换为元组类型

猜你喜欢

转载自blog.csdn.net/weixin_42042680/article/details/80055985
今日推荐