封装解构,集合,字典,内建函数和简单选择排序相关知识及习题

封装

将多个值使用逗号分割,组合在一起
本质上,返回一个元组,只是省掉了小括号
python特有语法,被很多语言学习和借鉴

解构

把线性结构的元素解开,并顺序的赋给其它变量
左边接纳的变量数要和右边解开的元素个数一致

转置矩阵

方阵

利用封装解构完成代码

矩阵
先开辟空间再利用封装解构完成代码

利用enumerate函数得到索引值完成代码

集合

可变的 、 无序的 、 不重复 的元素的集合
set的元素要求必须可以hash
元素不可以索引
set可以迭代
set增加
add(elem)
增加一个元素到set中,如果元素存在,什么都不做
update(*others)
合并其他元素到set集合中来,参数others必须是可迭代对象,就地修改
set删除
remove(elem)
从set中移除一个元素,元素不存在,抛出KeyError异常。为什么是KeyError?
discard(elem)
从set中移除一个元素,元素不存在,什么都不做
pop() -> item
移除并返回任意的元素。为什么是任意元素?空集返回KeyError异常
clear()
移除所有元素
set修改、查询
修改
要么删除,要么加入新的元素
查询
非线性结构,无法索引
遍历
可以迭代所有元素
成员运算符
in 和 not in 判断元素是否在set中
集合练习
随机产生2组各10个数字的列表,如下要求:
每个数字取值范围[10,20]
统计20个数字中,一共有多少个不同的数字?
2组之间进行比较,不重复的数字有几个?分别是什么?
2组之间进行比较,重复的数字有几个?分别是什么?

字典

key-value键值对的数据的集合
可变的 、 无序的 、 key不重复
字典增加和修改
d[key] = value
将key对应的值修改为value
key不存在添加新的kv对
update([other]) -> None
使用另一个字典的kv对更新本字典
key不存在,就添加
key存在,覆盖已经存在的key对应的值
就地修改
字典删除
pop(key[, default])
key存在,移除它,并返回它的value
key不存在,返回给定的default
default未设置,key不存在则抛出KeyError异常
popitem()
移除并返回一个任意的键值对
字典为empty,抛出KeyError异常
clear()
清空字典
字典遍历
for ... in dict
既可以遍历key,也能遍历value
defaultdict
collections.defaultdict([default_factory[, ...]])
第一个参数是default_factory,缺省是None,它提供一个初始化函数。当key不存在的时候,会调用
这个工厂函数来生成key对应的value
OrderedDict(有序字典)
collections.OrderedDict([items])
key并不是按照加入的顺序排列,可以使用OrderedDict记录顺序
字典练习
字符串重复统计
字符表‘abcdefghijklmnopqrstuvwxyz‘
随机挑选2个字母组成字符串,共挑选100个
降序输出所有不同的字符串及重复的次数

简单的选择排序

属于选择排序
两两比较大小,找出极值(极大值或极小值)被放置在固定的位置,这个固定位置一般指的是
某一端
结果分为升序和降序排列
标注的是二元方法,在其中加入判断极大值是否与极小值交换位置,并且其中加入了优化判断是否提前完成排序

内建函数

标识 id
哈希 hash
类型 type
类型转换
float() int() bin(二进制字符串)hex(十六进制) oct(八进制) bool() list() tuple() dict() set() complex() bytes() bytearray()
输入 input([prompt])
打印 print(*object,sep=‘‘,end=‘\n‘,file=sys.stdout,flush=False)
绝对值 abs(x)
最大值max() 最小值min()
round() 四舍六入五取偶
pow(x,y)等价于x**y
range(stop)
divmod(x,y)等价于 tuple(x//y,x%y)
sum(iterable[,star t])对可迭代对象的所有数值元素求和
sum(range(1,100,2))
chr(i) 给一个一定范围的整数返回对应的字符
ord(c) 返回字符对应的整数
str() 、repr()、ascii() 后面说
sorted(iterable[, key][, reverse]) 排序
返回一个新的列表,默认升序
reverse是反转
翻转 reversed(seq)
返回一个翻转元素的迭代器

原文地址:http://blog.51cto.com/13896223/2161644

时间: 2024-10-13 14:08:34

封装解构,集合,字典,内建函数和简单选择排序相关知识及习题的相关文章

数据结构 - 简单选择排序(simple selection sort) 详解 及 代码(C++)

数据结构 - 简单选择排序(simple selection sort) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28601965 选择排序(selection sort) : 每一趟在n-i+1个记录中选取关键字最小的记录作为有序序列中第i个记录. 简单选择排序(simple selection sort) : 通过n-i次关键字之间的比较, 从n-i+1个记录中选出关键字最小的记录, 并和第i个记录交换. 选择排序需

算法导论 第6章 堆排序(简单选择排序、堆排序)

堆数据结构实际上是一种数组对象,是以数组的形式存储的,可是它能够被视为一颗全然二叉树,因此又叫二叉堆.堆分为下面两种类型: 大顶堆:父结点的值不小于其子结点的值,堆顶元素最大 小顶堆:父结点的值不大于其子结点的值,堆顶元素最小 堆排序的时间复杂度跟合并排序一样,都是O(nlgn),可是合并排序不是原地排序(原地排序:在排序过程中,仅仅有常数个元素是保存在数组以外的空间),合并排序的全部元素都被复制到另外的数组空间中去,而堆排序是一个原地排序算法. 1.在堆排序中,我们通常使用大顶堆来实现,因为堆

【算法】 简单选择排序

/// <summary> /// 简单选择排序 /// 思路 (与冒泡排序类似): /// 遍历源集合,每次选出最大或最小元素,放在未排序子集末尾或首位 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <param name="func"&g

选择排序---简单选择排序 堆排序

一.简单选择排序 对于n个数要进行n次排序,第一次,将最小的数放在第一个.第二次,将第二小的树,放在第二个.... 每次都和后面的数做比较,如果是从小到大的排序,当当前的数字比后面的大时,要进行交换. #include <stdio.h> void chosesort(int a[],int length) { int i,j,temp; for(i=0;i<length;i++) for(j=i+1;j<length;j++) { if(a[i]>a[j]) { temp

大话数据结构——简单选择排序

在学了冒泡排序后,会发觉这种算法就是不断比较交换.虽简单直接,显然给人一种繁琐的感觉.那有没有更好一点的算法呢?这当然有啦,没有就糟糕透了 :-P 这篇文章介绍一种较冒泡要好的排序算法:简单选择排序 看到“选择”这两字估计也猜到一二了.没错,这种算法的思想就是:待找到了最适合的那位数的位置我才选择与它进行交换 这样做,我们大大省下了很多不必要的交换.因为在代码编写中,交换函数是经常使用,所以一般将其封装成一个函数进行调用.如果存在非常多不必要的交换操作,这就产生了非常多不必要的函数调用.要知道,

八大排序算法之三选择排序—简单选择排序(Simple Selection Sort)

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与

简单选择排序的C++实现

简单选择排序(simple selection sort)的基本思想: 第一次选择所有数组元素中最小的放到第一个位置,第二次从剩下的n-1个元素中选择最小的放到第二个位置,以此类推,直到剩下一个元素,放到最后的位置上. 基本步骤: (1)首先通过n-1次比较,从n个数组元素中找出最小的,将它与a[0]交换——第1趟选择排序,结果最小的数被安置在a[0]位置上. (2)再通过n-2次比较,从剩下的n-1个数组元素中找出次小的,将它与a[1]交换——第二趟选择排序,结果次小的放在a[1]的位置上.

排序——直接选择排序(简单选择排序)

直接选择排序也称简单选择排序,是一种相对简单的排序算法,它的基本思想是:从一列数中找出最小的,和第一个交换:剩下的重新找出最小的,和这列数的第二个交换,......一直进行n-1次比较之后,该数列已经为有序数列了. 例如:已知一组无序数列:6 3 5 1 4 2 9 第一次:[6 3 5 1 4 2 9] 最小数为:1 第二次:1 [3 5 6 4 2 9] 最小数为:2 第三次:1 2 [5 6 4 3 9] 最小数为:3 第四次:1 2 3 [6 4 5 9] 最小数为:4 第五次:1 2

算法_简单选择排序

每一轮选一个最小的和最靠前的位置交换. 栗子 : 3 7 1 5 第一轮:1 7 3 5 第二轮:1 3 7 5 第三轮:1 3 5 7 for(int i = 0;i<n;i++){//这里应该可以是i<n-1,最后一轮只剩一个无所谓 k = i; for (int j = i + 1; j < n; j++) { if (a[k] > a[j]) { k = j; } } if (k != i) { temp = a[i]; a[i] = a[k]; a[k] = temp;