Python_流程控制及数据结结构
Posted summer-dhy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python_流程控制及数据结结构相关的知识,希望对你有一定的参考价值。
----------------- 流程控制 --------------------
条件判断
语法:
# 单分支 if <condition>: <执行代码块> # 多分支 if <condition1>: <执行代码块1> elif <condition2>: <执行代码块2> elif <condition3>: <执行代码块3> else: <执行代码块> # 注: # condition必须为一个bool类型 # if elif else语句后面有一个冒号,冒号之后的执行代码块需要另起一行并进行缩进
示例:
# 单分支示例 age = 18 if age < 20: print("tool small") # 多分支示例(成绩评级) result = int(input('Please input your result: ')) if result >= 90: print("Your result is A") elif 80 <= result < 90: print("Your result is B") elif 70 <= result < 80: print("Your result is C") elif 60 <= result < 70: print("Your result is D") else: print("Your result is E") #注: # input()为内建函数,在控制台与用户进行交互,获取用户输入,返回字符串 # int(value) 将给定的值value转换成整数
循环
while 循环
# 语法 while cond: block while True: # 死循环 pass # 示例 a = 10 while a : # 条件满足则进入循环,当a = 0时,0为等价False,则不进入循环 print(a) a -=
for 循环
# 语法 for element in interatable: # 可迭代对象有可迭代元素,进入循环 block # 示例:循环输出10以内的数字 for i in range(0, 10): print(i) # 注: # range(stop) 计数器 # range(start, stop, step)生成一个序列,遍历start和stop之间的值,前包后不包;step表示步长,默认为1;
- continue 跳过当前当次循环,继续下一次循环
- break 结束当前循环
else子句:如果循环正常结束,else子句会被执行
----------------- 数据结构 ---------------------
概念
- 数据结构就是通过某种方式组织在一起的数据元素的集合,这些元素可以是数字或字符;在Python中。最基本的数据结构是序列。序列中的每个元素被分配一个序号(即元素的位置,称为索引,索引从0开始,即:第一个索引是0,第二个是1,以此类推)
列表
列表(List):有序的集合,可修改,使用[]表示
定义列表
格式:list_name = [1, 2, 3, 4, 5]
空列表:list_name = []
列表操作
>>> lst = [1, 2, 3] # append(obj),末尾追加元素,就地修改且返回None,时间复杂度O(1) >>> lst.append(5) >>> lst [1, 2, 3, 5] # list_name[index] = value 索引访问修改,需注意索引不可越界 >>> lst[3] = 4 >>> lst [1, 2, 3, 4] # insert(index, obj) 在指定索引位置插入元素obj,就地修改且返回None,时间复杂度O(n),可越界:越上界,尾部追加;越下界,头部追加 >>> lst.insert(1,6) >>> lst [1, 6, 2, 3, 4] # extend(interatable),将可迭代元素追加至列表中,就地修改且返回None >>> lst.extend(range(7,10)) >>> lst [1, 6, 2, 3, 4, 7, 8, 9] >>> lst.extend([11, 12]) >>> lst [1, 6, 2, 3, 4, 7, 8, 9, 11, 12] # + 将两个列表连接起来,产生新的列表,原列表不变 >>> lst + [100, 200, 300] [1, 6, 2, 3, 4, 7, 8, 9, 11, 12, 100, 200, 300] >>> lst # 原列表不变 [1, 6, 2, 3, 4, 7, 8, 9, 11, 12] # * 将本列表元素重复n次,返回新列表;注意分辨以下示例区别 >>> lst * 3 [1, 6, 2, 3, 4, 7, 8, 9, 11, 12, 1, 6, 2, 3, 4, 7, 8, 9, 11, 12, 1, 6, 2, 3, 4, 7, 8, 9, 11, 12] >>> lst # 原列表不变 [1, 6, 2, 3, 4, 7, 8, 9, 11, 12] >>> [1, 2, 3] * 3 [1, 2, 3, 1, 2, 3, 1, 2, 3] >>> [[1, 2, 3] * 3] [[1, 2, 3, 1, 2, 3, 1, 2, 3]] >>> [[1, 2, 3] ] * 3 [[1, 2, 3], [1, 2, 3], [1, 2, 3]] # remove(value),从左至右匹配第一个value的值,找到则删除,就地修改且并返回None >>> lst = [1, 2, 3, 1, 2, 5, 6] >>> lst.remove(1) >>> lst [2, 3, 1, 2, 5, 6] # pop(index),不指定index,从列表尾部删除一个元素,指定index则从索引出删除一个元素,返回所删除元素,越界抛出:IndexError错误 >>> lst.pop() 6 >>> lst [2, 3, 1, 2, 5] >>> lst.pop(3) 2 >>> lst [2, 3, 1, 5] # clear(),清除列表所有元素,剩下一个空列表 >>> lst.clear() >>> lst [] # reverse(),对列表内元素降序排序,就地修改且返回None >>> lst = [1, 2, 3, 1, 2, 5, 6] >>> lst.reverse() >>> lst [6, 5, 2, 1, 3, 2, 1] # sort(key=None, reverse=False),对列表内元素进行排序,就地修改且返回None;默认为升序,若reverse=True,则为降序;key一个函数,指定如果排序 >>> lst.sort() >>> lst [1, 1, 2, 2, 3, 5, 6] >>> lst.sort(reverse=True) >>> lst [6, 5, 3, 2, 2, 1, 1] # in 包含关系判断,即:in左侧元素是否包含在右侧列表内;返回布尔值 >>> [1, 2] in [1, 2, [3, 4]] False >>> [3, 4] in [1, 2, [3, 4]] True # 列表复制:lst1 = lst2 >>> a = list(range(4)) # 产生一个新列表a >>> b = list(range(4)) # 产生一个新列表b >>> a == b # 判断a列表和b列表内元素是否相同 True >>> c = a # 将列表c指向列表a的列表内存地址,所以当修改列表c或者列表a时,修改的都是a和c所指向的同一个内存地址的列表元素 >>> c[2] = 10 >>> c [0, 1, 10, 3] >>> a [0, 1, 10, 3] >>> b # 虽然a和b列表内容相同,但是b和a指向的是不同的内存地址,所以当a列表修改时,b列表不变 [0, 1, 2, 3] >>> id(a), id(c), id(b) # 通过id(),查看内存地址,由次可见,a和c内存地址相同 (4509036368, 4509036368, 4509036288) # copy(),影子拷贝(浅拷贝),遇到引用类型,只复制引用 >>> a = [1, [2, 3], 4] >>> b = a.copy() # 列表内元素复制,列表内引用的列表,只复制引用地址,即列a和b列表内引用的列表为同一内存地址的列表 >>> b [1, [2, 3], 4] >>> b[1][1] = 11 # 当b修改列表内引用的列表内元素时,由于a和b列表内引用的列表指向同一内存地址,所以a也会随之修改 >>> b [1, [2, 11], 4] >>> a [1, [2, 11], 4] >>> b[0] = 99 # 由于列表内元素直接复制,所以当b修改元素时,a不会发生修改 >>> b [99, [2, 11], 4] >>> a [1, [2, 11], 4] # 深拷贝deepcopy(需调用copy模块;import copy),直接复制所有元素,列表内的引用类型亦直接拷贝引用元素 >>> import copy >>> a = [1, [2, 3, 4], 5] >>> b = copy.deepcopy(a) >>> b [1, [2, 3, 4], 5] >>> b[1][1] = 88 # 列表内引用的列表直接拷贝其列表内容,所以当b列表发生改变时,a列表不变 >>> b [1, [2, 88, 4], 5] >>> a [1, [2, 3, 4], 5] # random()随机数 >>> import random >>> random.random() 0.8953651046887807 >>> random.random() 0.02852709684663768 >>> random.randint(5, 20) # 返回5-20之间的整数 6 >>> random.randint(5, 20) 15 >>> random.randrange(11, 100, 2) # 返回11-100之间以2递增的整数的随机值,默认步长为1 57 >>> random.randrange(11, 100, 2) 41 >>> random.choice(['剪刀', '石头', '布']) # 从非空序列随机挑选一个元素 '剪刀' >>> random.choice(['剪刀', '石头', '布']) '石头' >>> random.sample('abcdefghijklmnopqrstuvwxyz!@#$%^&*()', 8) # 从非空序列取出n个不同的元素并生成一个新列表 ['!', 'n', '&', 'd', 'q', 'l', 's', 't'] >>> random.sample('abcdefghijklmnopqrstuvwxyz!@#$%^&*()', 8) ['x', '@', 'c', 'p', 'a', 'u', 'h', 'g'] >>> lst = [1, 2, 3, 4, 5] >>> random.shuffle(lst) # 就地打乱列表排序 >>> lst [2, 5, 3, 1, 4]
索引:序列里的元素都是有序号的,从0开始递增,索引0指向第一个元素,最后一个元素可以用-1表示
元组
- 元组(tuple):不可修改,使用()表示
- 定义元组:
- tuple_name = (1, 2, 3, 4)
- 一个元素元组定义:(1,) 注意有个逗号
- 空元组:tuple_name = (),tuple_name = tuple()工厂方法
同列表一样,可以通过索引index访问
元组操作:元组是只读的,所以增删改查操作都没有
>>> tup = tuple(range(1, 10, 2)) # interable >>> tup (1, 3, 5, 7, 9) >>> t = (1,) # 注意一个元素需要加逗号 >>> t * 5 # 产生新元组,原元组不变 (1, 1, 1, 1, 1) >>> t (1,) >>> tup[2] # 通过index查看tuple特定索引位置的值 5 # count(value),返回元组中value的次数 >>> tup = (1, 2, 3, 2, 3, 2) >>> tup.count(2) 3 # len(tuple)返回元组中元素的个数 >>> len(tup) 6
字典
以上是关于Python_流程控制及数据结结构的主要内容,如果未能解决你的问题,请参考以下文章