递归、二维数组顺时针旋转90°、正则表达式

1、   递归算法是一种直接或间接调用自身算法的过程。

特点:

  • 递归就是在过程或函数里调用自身
  • 明确的递归结束条件,即递归出口
  • 简洁,但是不提倡
  • 递归次数多容易造成栈溢出

要求:

  • 每次调用递归规模上有所减小
  • 前一次为后一次做准备
  • 规模较小时必须直接给出解答而不再进行递归调用

例子:递归实现二分法

 def searchMyData(mydate,a1):
mid = int(len(mydate)/2)
if mid >= 1:
if mydate[mid]>a1:
print("目标数据在%s左侧"% mydate[mid])
searchMyData(mydate[:mid],a1)
elif mydate[mid]<a1:
print("目标数据在%s右侧"%mydate[mid])
searchMyData(mydate[mid:],a1)
else:
print("We get it!")
else:
print("We can't find it!")
if __name__ == '__main__':
data = list(range(1,600,3))
print(data)
searchMyData(data,397)

结果:

[1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, 85, 88, 91, 94, 97, 100, 103, 106, 109, 112, 115, 118, 121, 124, 127, 130, 133, 136, 139, 142, 145, 148, 151, 154, 157, 160, 163, 166, 169, 172, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 205, 208, 211, 214, 217, 220, 223, 226, 229, 232, 235, 238, 241, 244, 247, 250, 253, 256, 259, 262, 265, 268, 271, 274, 277, 280, 283, 286, 289, 292, 295, 298, 301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, 586, 589, 592, 595, 598]

目标数据在301右侧

目标数据在451左侧

目标数据在376右侧

目标数据在412左侧

目标数据在394右侧

目标数据在403左侧

We get it!

2、  二维数组90°顺时针旋转

 a = [[col for col in range(4)] for row in range(4)]
for i in a:
print(i)
print('-'*20)
for row_2 in range(4):
for col_2 in range(row_2,4):
tmp = a[row_2][col_2]
a[row_2][col_2] = a[col_2][row_2]
a[col_2][row_2] = tmp for i in a:
print(i)

结果:

[0, 1, 2, 3]

[0, 1, 2, 3]

[0, 1, 2, 3]

[0, 1, 2, 3]

--------------------

[0, 0, 0, 0]

[1, 1, 1, 1]

[2, 2, 2, 2]

[3, 3, 3, 3]

注:a[r][c] 表示二维列表的第2行第c列的元素,和数组表示方法类似

3、  正则表达式

 import re
ret = re.match("abc","abcdef")
print(ret)
print(ret.group())
ret = re.match("[0-9]","abc6fak")# 必须是字符串
#match 是从开头匹配,如果开头不是数字,那么不可匹配
ret = re.match("[0-9]{0,10}","abc6fak")# 匹配0~10次
ret = re.match("[0-9]{10}","abc6fak")# 匹配10次
if ret:
print(ret.group())
ret = re.findall("[0-9]{1,10}","213abc6fak")# 匹配所有数字
ret = re.findall("[0-9]{1,10}","213abc6fak")# 匹配所有字符
ret = re.findall(".*","1234aggh") # 匹配所有,最后有''
ret = re.findall(".","1234aggh") # 匹配单个字符
ret = re.findall(".+","1234aggh") # 匹配所有
ret = re.sub("\d+","|","1234aggh",count=2) # 替换前两个
if ret:
print(ret)

Python学习笔记 之 递归、二维数组顺时针旋转90°、正则表达式的更多相关文章

  1. PHP学习笔记十三【二维数组】

    <?php //二维数组 $arr=array(array(1,2,3),array(4,5,6)); $arr1[0]=array(12,34,65); $arr1[1]=array(34,6 ...

  2. solidity 学习笔记 2 (二维数组)

    solidity 二维数组: pragma solidity ^0.4.23; contract twoArray{ uint[2][3] grade =[[20,30],[40,50],[45,60 ...

  3. LeetCode——Rotate Image(二维数组顺时针旋转90度)

      问题: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockw ...

  4. python3--算法基础:二维数组转90度

    python3--算法基础:二维数组转90度 [0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3] 二维数组转90度 [0, 0, 0, 0][1, 1, ...

  5. Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  6. python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  7. 【学习笔记】Tensor多维数组和axis的理解

    Tensor多维数组和axis的理解 今天在编写程序的时候一直对于axis=0或等于1搞不明白,这样对于整个numpy或者是tensorflow的基本运算和数据处理都会很模糊,所以花了一些时间来搞清楚 ...

  8. 个人学习记录1:二维数组保存到cookie后再读取

    二维数组保存到cookie后再读取 var heartsArray = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0],[0,0, ...

  9. java笔记11之二维数组

    格式1: 二维数组:就是元素为一维数组的一个数组 数据类型[][] 数组名 = new 数组类型[m][n] 其中m为行 n为列 注意: A:以下格式也可以表示二维数组            a:数据 ...

随机推荐

  1. iOS开发之功能模块--推送之坑问题解决

    不管想不想看我后面再开发中总结的经验,但是很值得推荐一位大神写的关于苹果推送,很多内容哦:http://www.cnblogs.com/qiqibo/category/408304.html 苹果开发 ...

  2. ASP.NET MVC中Unobtrusive Ajax的妙用

    Unobtrusive Javascript有三层含义:一是在HTML代码中不会随意的插入Javsscript代码,只在标签中加一些额外的属性值,然后被引用的脚本文件识别和处理:二是通过脚本文件所增加 ...

  3. ORACLE 9i 数据库体系结构图

    ORACLE 9i 的数据库体系结构图,非常的全面.系统.高屋建瓴的整体介绍了ORACLE 9i 的数据库体系结构.如果能全面了解.清晰梳理.深入掌握这些知识点,相信对你了解学习.深入研究ORACLE ...

  4. 0024 Java学习笔记-面向对象-包装类、对象的比较、String常量池问题

    包装类 基本类型-->包装类 byte-->Byte short-->Short int-->Integer long-->Long char-->Characte ...

  5. Python魔术方法-Magic Method

    介绍 在Python中,所有以"__"双下划线包起来的方法,都统称为"Magic Method",例如类的初始化方法 __init__ ,Python中所有的魔 ...

  6. WPF RichTextbox

    WPFTextBoxAutoComplete AvalonEdit WPF SyntaxHighlightBox   WinForm 下的 Fast Colored TextBox for Synta ...

  7. git stash 用法

    git stash用于将当前工作区的修改暂存起来,就像堆栈一样,可以随时将某一次缓存的修改再重新应用到当前工作区. 一旦用好了这个命令,会极大提高工作效率.   直接举例说明: 1.准备工作,首先初始 ...

  8. HDU 1729 Stone Game【SG函数】

    以下转载至:长春理工大学赵小舟博弈论ppt 题目大意: 1.有n个盒子,每个盒子都有它的容量s 2.在游戏开始时,每个盒子里都有一些石子 3.双方轮流进行游戏,向一个盒子投入n个石子,其中n不能大于当 ...

  9. sql 入门经典(第五版) Ryan Stephens 学习笔记 后续——存储引擎

    一.引擎基础 1 查看系统支持的存储引擎 show engines; 2 查看表使用的存储引擎两种方法: a.show table status from database_name where na ...

  10. POJ2104 K-th Number[主席树]【学习笔记】

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 51440   Accepted: 17594 Ca ...