菜鸟学飞自学Python(一)

(个人学习抄录,便于回顾)

list 和 tuple

list:列表,一种数据类型list 是一种有序的集合,可以随时添加和删除其中的元素

len():求列表元素个数

例:number['01' , '02' , '06']

访问:number[0],number[1],number[2](正向)

   number[-1],number[-2],number[-3] (倒序)

添加:number.append('09') —— 添加在最后

插入:number.append(2,'04') —— 插入索引号为 2 的位置,后面元素后移

删除:number.pop() —— 删除末尾元素

   number.pop(1) —— 删除索引号为 1 的元素

替换:number[1]='03' —— 替换索引号为 1 的元素

list 中元素的数据类型可以不同,如 K = ['Tim', 123, False]

list 中可以包含另一个 list ,如 s = ['abc', 'xyz', ['O','Q'], 'st']

注:len(s) = 4

r = ['O' , 'Q']

s = ['abc' , 'xyz' , r , 'st']

取 'O' 可以用 r[0] 或者 s[2][0]

故,s 可以看成是二维数组。

如果 list 中一个元素都没有,则为空,长度为 0。

 

tuple:初始化后不能修改

number = ('01' , '02' , '03')

取元素:number[0],number[-1]

tuple 不能改变,所以代码更加的安全,尽量使用 tuple 代替 list

当定义 tuple 时,元素也必须确定下来

如:t  = (1,2)

定义空的:t = ()

定义只含一个元素的,会产生歧义:t = (3),会默认为 t = 3,括号被解释为算术运算的括号,为了避免歧义,定义时会加一个逗号区分,t = (3,)

可变的 tuple,如:

t = ('a' , 'b' , ['A' , 'B'])

t[2][0] = 'X'

t[2][1] = 'Y'

t = ('a' , 'b' , ['X' , 'Y'])

实际上 tuple 的指向一直没有改变,知识改变了 list 的指向,所以 tuple 中的元素内容发生改变。

 

条件判断

if 和 else 语句后面要加

根据 Python 的缩进规则,语句符合条件会执行,不符合则不会执行,只需要把代码块都缩进了就好,不需要加 {}


elif 是 if 和 else 的缩写,使用格式为:


if 语句从上往下判断,当前面的语句判断为 True 的时候,执行语句之后,会自动忽略之后所有的 if 和 else 语句。


上面的程序输出的结果是:teenager,但是实际应该是 adult,这是由于 if 语句运行的特点造成的,所以在编程的时候需要避免这种情况的发生。

 

input

input():返回的数据类型是 str,所以在输入数据之后要经过转换,比如说输入的数,则要利用 int() 进行转换

 

循环

for...in 循环

依次把 list 和 tuple 中的元素迭代出来


for  x  in...循环就是把每个元素带入 x 变量,然后执行缩进块语句

若要计算很多数的相加,把他们手动输入不现实,所以利用函数 range(),可以生成一个整数序列,然后用 list() 函数转化为 list。

range(5):[0,1,2,3,4]

 

while 循环

条件满足,执行循环,不满足跳出循环

 

进入死循环,Ctrl+C 退出程序,或强制结束 Python 程序

 

dict 和 set

dict

dict 使用键-值(key-value)存储,具有极快的查找速度


把数据放入 dict 中,除了初始化指定以外,还可以通过 key 放入


一个 key 只能对应一个 value,重复赋值,之前的数据将会被替代

 

如果 key 不存在,dict 将会报错

避免 key 不存在的错误,有两种方法,一是通过 in 判断 key 是否存在:

 

二是通过 dict 提供的 get 方法,如果 key 不存在,返回 None,或者返回自己指定的 Value:

 

注:返回 None 时,Python 的交互式命令行不显示结果

删除:pop(key)

注:dict 内部存放的顺序和 key 放入的顺序是没有关系的

dict 的特点:

1、查找和插入的速度极快,不会随着 key 的增加而增加;

2、需要占用大量的内存,内存浪费多

list 特点相反:

1、查找和插入的时间随着元素的增加而增加;

2、占用空间小,浪费内存很少

 

dict 是用空间换取时间的一种方法。

dict 的 key 必须是不可变对象

原因:dict 通过 key 来计算 value 的存储位置,如果每次计算相同的 key 得出的结果不同,那 dict 内部就完全混乱了。通过 key 计算位置的算法称为哈希算法(Hash)

要保证 hash 的正确性,作为 key 的对象就不能变。在 Python 中,字符串,整数都是不可变的,可以作为 key,但是 list 是可变的,不能作为 key

 

set

set:与 dict 类似,也是一组 key 的集合,但不存储 value。由于 key 不能重复,所以,在 set 中,没有重复的 key

要创建一个 set,需要提供一个 list 作为输入集合:

注意,传入的参数[1, 2, 3]是一个 list,而显示的{1, 2, 3}只是告诉你这个 set 内部有 1,2,3 这 3 个元素,显示的顺序也不表示 set 是有序的。
 
重复元素在 set 中自动被过滤

 
通过 add(key) 方法可以添加元素到 set 中,可以重复添加,但是不会有效果:

 
通过 remove(key) 可以删除元素

 
set 可以看成数学意义上无序和无重复元素的集合,因此,两个 set 可以做数学意义上的交集、并集等操作

 
set 和 dict 的唯一区别在于没有存储对应的 value,但是,set 的原理和 dict 一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证 set 内部“不会有重复元素”。
 
不可变对象
str 是不可变对象,对 str 进行操作:

虽然对字符串的操作可以利用 replace() 方法,也确实出现了 'Abc' ,但变量 a 依旧没有改变
对代码进行如下修改:


  要牢记,a 是变量,'abc' 才是字符串对象!我们常说,对象 a 的内容是 'abc' ,但其实是指,a 本身是一个变量,它指向的对象的内容才是 'abc'。
  调用 replace 方法实际上是创建了一个新的字符串 'Abc' 并返回,变量 a 仍指向原有的字符串 'abc',但变量 b 指向新的字符串 'Abc'
  对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。
posted @ 2020-07-15 16:20  我脑子不好  阅读(201)  评论(0编辑  收藏  举报