遍历

Python for循环及基础用法详解

心已入冬 提交于 2019-12-21 20:28:09
这篇文章为大家介绍python for 循环,它常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取序列中的各个元素 Python 中的循环语句有 2 种,分别是 while 循环和 for 循环,前面章节已经对 while 做了详细的讲解,本节给大家介绍 for 循环,它常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取序列中的各个元素。 for 循环的语法格式如下: for 迭代变量 in 字符串|列表|元组|字典|集合: 代码块 格式中,迭代变量用于存放从序列类型变量中读取出来的元素,所以一般不会在循环中对迭代变量手动赋值;代码块指的是具有相同缩进格式的多行代码(和 while 一样),由于和循环结构联用,因此代码块又称为循环体。 for 循环语句的执行流程如图 1 所示。 图 1 for 循环语句的执行流程图 例如: name = '张三' #变量name,逐个输出各个字符 for ch in name: print(ch) 运行结果为: 张 三 可以看到,使用 for 循环遍历 “张三” 字符串的过程中,迭代变量 ch 先后被赋值为‘张’和‘三’,并代入循环体中运行,只不过例子中的循环体比较简单,只有一行输出代码。 for 进行数值循环 在使用 for 循环时,最基本的应用就是进行数值循环。比如说,想要实现从 1 到 100 的累加,可以执行如下代码:

跳表

空扰寡人 提交于 2019-12-21 17:15:58
跳表 文章目录 跳表 跳表概念 跳表结构 跳表性能 跳表的高度 查找时间复杂度 插入时间复杂度 删除时间复杂度 内存消耗 索引动态更新 跳表概念 二分查找法依赖于数组的随机访问特性,只能用数组实现 跳表是基于链表实现类似于二分查找的算法 查找、插入、删除各方面性能都不错的动态数据结构,甚至可以替代红黑树 Redis 中的有序集合(Sorted Set)就是用跳表来实现的 跳表结构 对于一个有序的单链表,想在其中查找某个数据,只能从头到尾遍历链表。效率很低 对链表建立一级索引,每两个结点提取一个结点到上一级,抽出来的一级称为索引层 索引层结点有指针指向下一级结点 在查找结点时,先在索引层遍历,再下降到原始链表,就能减少遍历次数 当链表很长,使用多级索引结构可以大大提高查找效率 跳表性能 跳表的高度 第 k 级索引的结点个数是第 k-1 级索引的结点个数的 1 2 \frac{1}{2} 2 1 ​ ,那么第 k 级索引 结点的个数就是 n 2 k \frac{n}{2^k} 2 k n ​ 假设索引有 h 级,最高级的索引有 2 个结点。通过上面的公式,可以得到求得 h = l o g 2 n − 1 h=log_2n-1 h = l o g 2 ​ n − 1 如果包含原始链表这一层,整个跳表的高度就是 l o g 2 n log_2n l o g 2 ​ n 查找时间复杂度

遍历List、Map删除元素

耗尽温柔 提交于 2019-12-21 09:00:27
遍历List删除元素 方法一: List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add(null); list.add("5"); for(int i=0; i<list.size(); i++){ list.remove(i); i--; } System.out.println(list.size()); 方法二: List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add(null); list.add("5"); for (Iterator iterator = list.iterator(); iterator.hasNext();) { String tmp = (String)iterator.next(); iterator.remove(); } System.out.println(list.size()); 遍历Map删除元素 方法一: Map<String,String> map = new HashMap<>(); map.put("1","aaa"); map.put("2","bbb"); map

144. 二叉树的前序遍历 C语言

怎甘沉沦 提交于 2019-12-21 08:55:20
题目是经典前序遍历,不同的是要把节点数据存到数组中,并返回 。解题要点就是把数组作为参数代入,随着循环存储节点数据。 int* preorderTraversal(struct TreeNode* root, int* returnSize) { int* ret =NULL; *returnSize=0; backtrack(root, returnSize, &ret); return ret; } void backtrack(struct TreeNode* root, int* returnSize, int** ret) { *ret = realloc(*ret, 4 * ((*returnSize) + 1)); if (root == NULL); else { (*ret)[*returnSize] = root->val; (*returnSize)++; backtrack(root->left, returnSize, ret); backtrack(root->right, returnSize, ret); } } int* preorderTraversal(struct TreeNode* root, int* returnSize) { int* ret = NULL; *returnSize = 0; ret = malloc(4 * 256)

二叉树的链式实现

↘锁芯ラ 提交于 2019-12-21 07:21:22
相关术语: 平衡树,非平衡树,完全数,满树。 实现策略: 1)数组实现 这个还是非常重要的,有时间写一下,先用链来写 元素n的(从0开始按层编号)左子树编号为2n+1,右子树编号为2n+2,数学证明就略了,用这个来控制下标 2)模拟链式实现 3)链式实现 树是一种非线性结构,那么跟前不一样,必须根据你的需求 来构造新的节点才能满足树中的节点特征 : package Tree;public class BinaryTreeNode { protected Object element; protected BinaryTreeNode left,right; public BinaryTreeNode(Object element)//用元素来构造一个结点 { this.element = element; left = null; right = null; } public int numChildren(){//返回结点的子树上结点的个数 int count = 0; if(left != null) count = 1 + left.numChildren(); if(right != null) count = count + 1 + right.numChildren(); return count; } } 下面是一个实现了一些基本操作的二叉树的ADT

Scala学习(三)----数组相关操作

让人想犯罪 __ 提交于 2019-12-21 05:47:02
数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组。 Java 和 C++程序员 通常会选用 数组 或 近似的结构 (比如 数组列表 或 向量 )来收集一组元素。在Scala中,我们的选择更多,不过现在我们先假定不关心其他选择,而只是想马上开始用数组。本篇的要点包括: 1. 若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer 2. 提供初始值时不要使用new 3. 用()来访问元素 4. 用for (elem<-arr)来遍历元素 5. 用for (elem<-arr if…)…yield…来将原数组转型为新数组 6. Scala数组和java数组可以互操作;用AnayBuffer,使用scalacollection.JavaConversions中的转换函数 定长数组 如果你需要一个 长度不变的数组 ,可以用Scala中的 Array 。例如: val nums= new Array [Int] (10) //长度为10的整数数组,所有元素初始化为0 val a= new Array [String] (10) //长度为10的字符串数组,所有元素初始化为null val s= Array("Hello", "World") //长度为2的Array[String]类型是推断出来的, 已提供初始值 就不需要 new S (0) ="Goodbye"

递归如何转换为非递归

大城市里の小女人 提交于 2019-12-21 04:24:50
递归 算法实际上是一种分而治之的方法,它把复杂问题分解为简单问题来求解。递归的特点包括:递归过程简洁、易编、易懂;递归过程效率低、重复计算多。 考虑递归的执行效率低,可以尝试将递归过程转换为非递归过程。本文就是来探讨怎么转换的。 将递归算法转换为非递归算法有两种方法,一种是直接求值(迭代/循环),不需要回溯;另一种是不能直接求值,需要回溯。前者使用一些变量保存中间结果,称为直接转换法;后者使用栈保存中间结果,称为间接转换法,下面分别讨论这两种方法。 一、直接转换法 直接转换法通常用来消除尾递归和单向递归,将递归结构用循环结构来替代。 1.单向递归 简单的说是指递归的过程总是朝着一个方向进行,如果函数1调用了函数2,而函数2又调用了函数1,则这种情况不属于单向递归。斐波那契数列(单向递归)的递归求解可转用一个迭代法实现。 斐波那契数列的递归求解: int Fib(int n) {   if(n <= 1) return n;   else return Fib(n - 1) + Fib(n - 2); } 转换为迭代求解过程: int Fib(int n) {    if(n <= 1) return n;   int twoBack = 0;    int oneBack = 1;    int cur;   for(int i = 2;i < = n; i++) {    cur

ES6 中的 Set

一笑奈何 提交于 2019-12-21 04:24:18
收录待用,修改转载已取得 腾讯云 授权 作者:kurtshen ES6 新增了几种集合类型,本文主要介绍Set以及其使用。 其基本描述为 Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。 它的声明 new Set([iterable]); 其中iterable是一个可迭代对象,其中的所有元素都会被加入到 Set 中。null被视作 undefined。也可以不传入[iterable],通过其add方法来添加元素。 对于ruby或者是python比较熟悉的同学可能会比较了解set这个东东。它是ES6 新增的有序列表集合,它不会包含重复项。 Set的属性 Set.prototype.size:返回Set实例的成员数量。 Set.prototype.constructor:默认的构造Set函数。 Set方法 add(value):添加某个值,返回Set结构本身。 delete(value):删除某个值,返回一个布尔值,表示删除成功。 has(value):返回一个布尔值,表示参数是否为Set的成员。 clear():清除所有成员,没有返回值。 keys() :返回一个键名的遍历器 values() :返回一个值的遍历器 entries() :返回一个键值对的遍历器 forEach():使用回调函数遍历每个成员 例子

[爬虫] BeautifulSoup库

时光总嘲笑我的痴心妄想 提交于 2019-12-21 01:40:11
Beautiful Soup库基础知识 Beautiful Soup库是解析xml和html的功能库。html、xml大都是一对一对的标签构成,所以Beautiful Soup库是解析、遍历、维护“标签树”的功能库,只要提供的是标签类型Beautiful Soup库都可以进行很好的解析。 Beauti Soup库的导入 from bs4 import BeautifulSoup import bs4 html文档 == 标签树 == BeautifulSoup类 可以认为三者是等价的 >>>from bs4 import BeautifulSoup >>>soup = BeautifulSoup('<html>data</html>','html.parser') >>>soup1=BeautifulSoup(open(r'D:\demo.html'),'html.parser') 简单来说一个BeautifulSoup类对应一个html文档的全部内容。如上面的soup、soup1都对应一个html文档。 Beautiful Soup类的基本元素 Tag 标签 最基本的信息组织单元,分别用<></>开头结尾,通过 soup.<标签> 获得 Name 标签名字,通过 <标签>.name 获取到 Attribute 标签的属性,字典形式,通过 <标签>.attrs 获取

Vue入门基础(for 指令)

前提是你 提交于 2019-12-20 16:19:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> for.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <title>Insert title here</title> </head> <body> <div id="vue-app-for"> <h1>for 指令 直接引用</h1> <!--直接引用--> {{arrays[0]}} {{arrays[1]}} {{arrays[2]}} {{arrays[3]}} {{arrays[4]}} <h1>for 指令 遍历数组</h1> <ul> <!-- for each 遍历数组--> <li v-for="obj in arrays"> {{obj}} </li> </ul> <ul> <!-- for each 遍历数组--> <li v-for="obj in arrays"> {{obj}} </li> </ul> <ul> <!-- for each 遍历数组 带下标--> <li v-for="(obj,index) in arrays"> {{index}} {