Python第三周 学习笔记(2)
直接选择排序:
- 两两比较大小,找出极值(极大值或极小值)被放置在固定的位置,这个固定位置一般指的是
某一端 n个数从左至右,索引从0开始到n-1,两两依次比较,记录大值索引,此轮所有数比较完毕,将大数和索引0数交换,如果大数就是索引1,不交换。第二轮,从1开始比较,找到最大值,将它和索引1位置交换,如果它就在索引1位置则不交换。依次类推,每次左边都会固定下一个大数。
- 时间复杂度O(n**2)
- 不稳定排序
没有办法知道当前轮是否已经达到排序要求,但是可以知道极值是否在目标索引位置上
遍历次数1,...,n-1之和n(n-1)/2
对比冒泡法:减少了交换次数,提高了效率,性能略好
方法三、四实际上降低的是平均时间复杂度
方法一:
nums = [1, 2, 6, 7, 8, 9, 3, 4, 5]
for i in range(len(nums)):maxindex = ifor j in range(i + 1, len(nums)):if nums[j] < nums[maxindex]:maxindex = jif i != maxindex:nums[i], nums[maxindex] = nums[maxindex], nums[i]
print(nums)
方法二(基于方法一的优化):
- 优化点:内循环一次遍历同时取出最大、最小值 放在两端
nums = [7, 19, 15, 12, 15, 5, 13, 14, 8, 15] length = len(nums) for i in range(length // 2): maxindex = i minindex = length - i - 1 minorigin = length - i - 1 for j in range(i + 1, length - i):if nums[j] > nums[maxindex]:maxindex = jif nums[j-1] < nums[minindex]:#正序比较 或者逆序比较都可以 length - j - 1minindex = j - 1 if i != maxindex:nums[i], nums[maxindex] = nums[maxindex], nums[i] if i == minindex: #如果i就是最小值索引,则执行此if,因为上一行索引i的值与最大值已经进行了交换minindex = maxindex if minorigin != minindex:nums[minorigin], nums[minindex]=nums[minindex], nums[minorigin] print(nums)
方法三(基于方法二的优化):
- 优化点:如果一次迭代最大值与最小值相等则剩余元素值相同,即已排序完毕
nums = [7, 19, 15, 12, 15, 5, 13, 14, 8, 15] length = len(nums) for i in range(length // 2): maxindex = i minindex = length - i - 1 minorigin = length - i - 1 for j in range(i + 1, length - 1):if nums[j] > nums[maxindex]:maxindex = jif nums[length - j - 1] < nums[minindex]:minindex = length - j - 1 if minindex == maxindex: #!break if i != maxindex:nums[i], nums[maxindex] = nums[maxindex], nums[i] if i == minindex:minindex = maxindex if minorigin != minindex:nums[minorigin], nums[minindex] = nums[minindex], nums[minorigin] print(nums)
方法四(基于方法三的优化):
- 如果列表为下面这种情况,最小值无需交换
nums =[1, 1, 1, 1, 1, 1, 1, 1, 2] length = len(nums) for i in range(length // 2): maxindex = i minindex = length - i - 1 minorigin = length - i - 1 for j in range(i + 1, length - 1):if nums[j] > nums[maxindex]:maxindex = jif nums[length - j - 1] < nums[minindex]:minindex = length - j - 1 if minindex == maxindex: #!break if i != maxindex:nums[i], nums[maxindex] = nums[maxindex], nums[i] if i == minindex:minindex = maxindex if minorigin != minindex and nums[minorigin] != nums[minindex]: #!nums[minorigin], nums[minindex] = nums[minindex], nums[minorigin] print(nums)
习题解析
1.用户输入一个数字
- 打印每一位数字及其重复的次数
方法一:
num = input('>>>') d = {} for c in num: if not d.get(c):d[c] = 1continue d[c] += 1 print(d)
方法二:
d ={}
for c in num:if c not in d.keys():d[c] = 1else:d[c] += 1
print(d)
2.数字重复统计
- 随机产生100个整数
- 数字的范围[-1000, 1000]
- 升序输出所有不同的数字及其重复的次数
import random n = 100 nums = [0] * n for i in range(n): nums[i] = random.randint(-1000, 1000) print(nums) t = nums.copy() t.sort() print(t) d = {} for x in nums: if x not in d.keys():d[x] = 1 else:d[x] += 1 print(d) d1 = sorted(d.items()) print(d1)
3.字符串重复统计
- 字符表'abcdefghijklmnopqrstuvwxyz'
- 随机挑选2个字母组成字符串,共挑选100个
- 降序输出所有不同的字符串及重复的次数
import random alphabet = 'abcdefghijklmnopqrstuvwxyz' words = [] for _ in range(100): words.append(''.join(random.choice(alphabet) for _ in range(2))) d = {} for x in words: d[x] = d.get(x, 0) + 1 print(d) d1 = sorted(d.items(), reverse = True) print(d1)
4.返回1-10平方的列表
[i ** 2 for i in range(1,11)]
5.有一个列表lst = [1,4,9,16,2,5,10,15],生成一个新列表,要求新列表元素是lst相邻2项的和
lst = [1,4,9,16,2,5,10,15]
[lst[i] + lst[i + 1] for i in range(len(lst) - 1)]
6.打印九九乘法表
[print('{}*{}={:<{}}{}'.format(j, i, j * i,2 if j ==1 else 3, '' if i != j else '\n'),end = '')for i in range(1,10) for j in range(1,i + 1)]
7."0001.abadicddws" 是ID格式,要求ID格式是以点号分割,左边是4位从1开始的整数,右边是
10位随机小写英文字母。请依次生成前100个ID的列表
import random
[('{:>04}'.format(i) + '.' + ''.join('abcdefghijklmnopqrstuvwxyz'[random.randint(0,25)] for _ in range(10))) for i in range(1,101)]
转载于:https://blog.51cto.com/11281400/2095514
Python第三周 学习笔记(2)相关推荐
- 吴恩达深度学习 | (12) 改善深层神经网络专项课程第三周学习笔记
课程视频 第三周PPT汇总 吴恩达深度学习专项课程共分为五个部分,本篇博客将介绍第二部分改善深层神经网络专项的第三周课程:超参数调试.Batch Normalization和深度学习框架. 目录 1. ...
- python第三周笔记_Python第三周 学习笔记(1)
key-value键值对的数据的集合 可变的.无序的.key不重复 初始化: d = dict() d = {} d = dict(**kwargs) 如:d = dict(a=1,b=2) dict ...
- 1612第三周学习笔记
基于视觉的目标检测与跟踪综述 1 目标检测 1.1 背景建模 Sobral等基于Opencv搭建的背景减除方法通用框架(Background Substraction Library, BGSLibr ...
- python第三周学习总结
函数参数 可变参数*args 高阶函数 关键字函数 命名关键字 类与对象 类的装饰器 类之间的关系 继承 pygame 文件流 文件的读写 步骤 异常处理 json JSON 函数 json.dump ...
- 吴恩达机器学习——第三周学习笔记
二元分类(Binary Classfication) 分类,一种方法是使用线性回归,将所有大于0.5的预测映射为1,将所有小于0.5的预测映射为0.然而,这种方法并不能很好地工作,因为分类实际上不是一 ...
- Linux内核分析——第三周学习笔记
20135313吴子怡.北京电子科技学院 chapter1 知识点梳理 一.Linux内核源代码简介 (视频中对目录下的文件进行了简介,记录如下) arch目录 占有相当庞大的空间 arch/x86目 ...
- 基于python的数字图像处理--学习笔记(三)
基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...
- 周志华西瓜书第三章学习笔记
第三章学习笔记 文章目录 第三章学习笔记 1.知识脉络 2.我的笔记 参考 1.知识脉络 2.我的笔记 这一章公式推导实在太多了,需要补充的推导过程也有很多,就不写电子档了.扩展公式推导和LDA部分补 ...
- Python+cplex运筹优化学习笔记(三)-营养膳食选择
Python+cplex运筹优化学习笔记(三)-营养膳食选择 前言 首先呢,说明一下,本文只是自己在学习过程中运用到的例子,然后规整总结一下,随便写写自己所做的一些笔记.小白学习,有不对的地方还望大家 ...
最新文章
- Oracle导入导出dmp文件
- centos7 安装php nts,centos7安装php7,亲测可行
- linux内核态串口读写程序,linux 0.11 内核学习 -- rs_io.s,串口汇编代码
- 文字链接_新生命道目录及音频、文字链接(20200501更新)
- 暴雪还不赶快?劳拉与光之守护者PC平台登陆
- RabbitMQ交换机简介
- 使用JOTM实现分布式事务管理(多数据源)
- 搞定客户端证书错误,看这篇就够了
- 以太坊智能合约开发第五篇:字符串拼接—Solidity
- 四大门户金融业务接连中招,流量这把钥匙正被氧化
- 《FLUENT 14流场分析自学手册》——1.6 计算网格与边界条件
- 个人朋友圈时代过去了,企业微信朋友圈开辟营销新思路
- 2017.3CCCC团体程序设计天梯赛初赛总结
- 与非门如何变成非门,与门,异或门
- 学计算机装机,新手学装机:小白如何从零开始学装机
- 如何用css只做一个div鼠标点击变色
- 百度Q-T语义一致性比未获奖 (总结)
- ALESA切削刀具1355.3904-01
- EF Core 5.0原生sql语句执行
- 用Python画一只溜达小狗——turtle库基础入门