哈哈,前边忘了介绍这个知识点了,老是用人家,不介绍一下都不好意思了。

range()函数是一个用来创建数字序列的函数。

问题来了,为什么要写函数?

  封装代码啊,让使用者不需要关心具体业务逻辑是如何实现的,拿过来能用就行了。

问题又来了,既然不需要关注业务逻辑的具体实现过程,那需要关注什么?

  关注函数的输入、输出这两部分就了,输入指的是函数的入参,输出指的是函数的返回值。知道函数执行需要什么参数、执行完返回什么就行了。

所以,我就要先介绍range()函数的参数了

  range(start, end, scan):

range()函数有3个参数,下面分别介绍一下这三个参数的含义

  start:计数的开始位置,默认值为0,即如果不给start传递参数值的话,默认start=0;

  end:计数的结束位置,编程语言中的范围基本上都是含头不含尾的,稍后举例说明

  scan:大家喜闻乐见的步长,跟切片中的步长是一个意思,注意range()中的步长只能是整数,不支持浮点数

正所谓:百闻不如一见,百说不一练

 >>> #介绍range()的用法
 >>> # 1 只有一个参数
 >>> r = range(5)
 >>> r
 range(0, 5)
 >>> l = list(r)
 >>> l
 [0, 1, 2, 3, 4]
 >>>
 >>> type(r)
 <class 'range'>
 >>>
 >>> for i in r:    #说明range是可迭代对象, 可迭代对象和迭代器在后面章节会有讲
     print(i)

 0
 1
 2
 3
 4
 >>>
 >>> # 2 两个参数的情况
 >>> rr = range(5,10)
 >>> rr
 range(5, 10)
 >>> ll = list(rr)
 >>> ll
 [5, 6, 7, 8, 9]
 >>>
 >>>
 >>> # 3 三个参数的情况
 >>> rrr = range(5,100,5)
 >>> rrr
 range(5, 100, 5)
 >>> lll = list(rrr)
 >>> lll
 [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
 >>> 

下面介绍range()在开发中的应用,我目前知道的range()更多的是用于循环,或转化为list、tuple。

 >>> # 1 将range转化为list
 >>> l = list(range(5))
 >>> type(l)
 <class 'list'>
 >>>
 >>> # 2 将range转化为tuple
 >>> t = tuple(range(5))
 >>> type(t)
 <class 'tuple'>
 >>>
 >>> # 3 range是可迭代对象可用于循环遍历
 >>> for i in range(5):
     print(i)

 0
 1
 2
 3
 4
 >>>
 >>> # 4 上面说到range的步长不能是浮点数,如果非要用浮点数会报什么错?
 >>> r = range(1,100,7.0)
 Traceback (most recent call last):
   File "<pyshell#14>", line 1, in <module>
     r = range(1,100,7.0)
 TypeError: 'float' object cannot be interpreted as an integer
 >>>

在整理素材的时候看到有网友用range()结合list()写了一个冒泡程序。我也想写个。

先搞懂什么是冒泡:

  冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

自己编写代码实现冒泡:

 >>> l = list(range(9))     #先生成一个列表
 >>> l
 [0, 1, 2, 3, 4, 5, 6, 7, 8]
 >>> import random
 >>> random.shuffle(l)      #把列表元素顺序打乱,这个在random模块有介绍
 >>> l
 [6, 5, 7, 8, 4, 3, 1, 0, 2]
 >>>
 >>> i = 0

 >>> #我想了一下,需要排序的次数最多为len(l)-1次,每次排序有len(l)-1个比较元素大小的判断。
if len(l) < 2: print('元素太少了,排什么序啊') else: while i < len(l)-1: #看到这里的len(l)-1了吗,在这段代码中出现了两次,以前在做数据库开发做报表的时候,项目经理就跟我说要把SQL中重复的部分 i += 1 #提取出来, 如本例中可以定义一个变量 a = len(l)-1,代码就会简洁一些。 for j in list(range(len(l)-1)): if l[j] >= l[j+1]: l[j],l[j+1] = l[j+1],l[j] >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8] >>>
 def bubble(bubbleList):
     listLength = len(bubbleList)
     while listLength > 0:
         for i in range(listLength - 1):
             if bubbleList[i] > bubbleList[i+1]:
                 bubbleList[i] = bubbleList[i] + bubbleList[i+1]
                 bubbleList[i+1] = bubbleList[i] - bubbleList[i+1]
                 bubbleList[i] = bubbleList[i] - bubbleList[i+1]
         listLength -= 1
     print bubbleList

 if __name__ == '__main__':
     bubbleList = [3, 4, 1, 2, 5, 8, 0]
     bubble(bubbleList)

#这段代码是在网上找到的网友实现的冒泡排序的函数
#对于有可能反复利用到的代码段还是要封装起来,便于引用。

下节课没什么毛病的话就该介绍list了

1.8 range的更多相关文章

  1. SQL Server 合并复制遇到identity range check报错的解决

        最近帮一个客户搭建跨洋的合并复制,由于数据库非常大,跨洋网络条件不稳定,因此只能通过备份初始化,在初始化完成后向海外订阅端插入数据时发现报出如下错误: Msg 548, Level 16, S ...

  2. Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range

    在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...

  3. [LeetCode] Range Addition 范围相加

    Assume you have an array of length n initialized with all 0's and are given k update operations. Eac ...

  4. [LeetCode] Count of Range Sum 区间和计数

    Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.Ra ...

  5. [LeetCode] Range Sum Query 2D - Mutable 二维区域和检索 - 可变

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...

  6. [LeetCode] Range Sum Query - Mutable 区域和检索 - 可变

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

  7. [LeetCode] Range Sum Query 2D - Immutable 二维区域和检索 - 不可变

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...

  8. [LeetCode] Range Sum Query - Immutable 区域和检索 - 不可变

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

  9. [LeetCode] Bitwise AND of Numbers Range 数字范围位相与

    Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers ...

  10. C++11中自定义range

    python中的range功能非常好用 for i in range(100): print(i) 现在利用C++11的基于范围的for循环特性实现C++中的range功能 class range { ...

随机推荐

  1. JVM-触发Full GC的情况

    除直接调用System.gc外,触发Full GC执行的情况有如下四种: 1.老年代空间不足 老年代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足现象,当执行Full GC后空间仍然不足 ...

  2. Linux几个小杂碎点(更新中)

    1 BIOS时间和系统时间问题 安装完CentOS后,系统时间是CST时间,而BIOS时间是UTC时间,因此系统时间会比BIOS时间快8个小时.如果您设置BIOS自动开机的话,就会总是差个8小时.需要 ...

  3. 前端工程构建工具FIS3

    FIS3 是面向前端的工程构建工具.解决前端工程中性能优化.资源加载(异步.同步.按需.预加载.依赖管理.合并.内嵌).模块化开发.自动化工具.开发规范.代码部署等问题. 一.安装 全局安装fis3 ...

  4. matlab输入输出语句(input、disp、fprintf)

    输入语句 输入数值 ?x=input('please input a number:') please input a number:22 x = 22 输入字符串 ?x=input('please ...

  5. [DeeplearningAI笔记]ML strategy_2_1误差分析

    机器学习策略-误差分析 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.1 误差分析 训练出来的模型往往没有达到人类水平的效果,为了得到人类水平的结果,我们对原因进行分析,这个过程称为误差 ...

  6. xBIM 日志操作

    目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...

  7. webrtc初探之一对一的连接过程(一)

    说明,我研究的是muan-khan的一个github项目,针对的是chrome对chrome,也就是pc对pc的一对一,一对多通话,感兴趣的可以继续往下看. github地址:https://gith ...

  8. BZOJ 1119: [POI2009]SLO [置换群]

    传送门:现在$POI$上的题洛谷都有了,还要$BZOJ$干什么 和$cow\ sorting$一样,只不过问$a_i \rightarrow b_i$ 注意置换是位置而不是数值...也就是说要$i$的 ...

  9. POJ 2125 Destroying The Graph [最小割 打印方案]

    Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8311   Accepted: 2 ...

  10. HTML标签的命名/CSS标准化命名大全

    在一个内容较多的HTML页面中,需要设计许多不同的框架,再为这些不同的框架及内容进行分类,给予相应的名称,从而使得网页结构更加清晰,也为工作提供了方便.许多新手朋友在设计一个HTML文件时,可能只会依 ...