当前位置:首页 » 编程语言 » python层级

python层级

发布时间: 2023-02-19 20:48:03

python 如何获取指定层级的大括号中的内容

#-*-coding:cp936-*-
text="{{{1,2,{3,4},{{{5,6}}}}}}"
defgetbrace(text,level):
result=[]
stack=[]
i=0
whilei<len(text)andtext[i]=="{"andlen(stack)<level:
i+=1
stack.append('{')

whilei<len(text):
iftext[i]=='{':stack.append('{')
iftext[i]=='}':stack.pop()
iflen(stack)>=level:result.append(text[i])
i+=1
return''.join(result)

print(getbrace(text,3))#获得第3层级大括号中的内容

Ⅱ OpenCV-Python教程:22.轮廓层级

理论

在前面的关于轮廓的几节里,我们介绍了轮廓相关的一些函数。但当我们用cv2.findContours()函数来找轮廓的时候,我们传入了一个参数,Contour Retrieval Mode。我们一般传的是cv2.RETR_LIST或者cv2.RETR_TREE这样就可以了。但是这个参数实际是什么意思呢?

并且在输出时我们得到了三个数组,第一个是图像,第二个是我们的轮廓,第三个输出名字是hierarchy。但是我们一直没用这个。

什么是层级?

一般来说我们用cv2.findContours()函数来检测图像里的目标,有时候目标在不同的地方,但是在有些情况下,有些图形在别的图形里面,就像图形嵌套,在这种情况下,我们把外面那层图形叫做parent,里面的叫child。这样图形里的轮廓之间就有了关系。我们可以指定一个轮廓和其他之间的是如何连接的,这种关系就是层级。

看下面的例子:

在这个图像里,不同的图形我标注了0-5,2和2a表示了最外层盒子的外部和内部轮廓。

这里轮廓0,1,2是外部的。我们可以说他们是hierarchy-0,或者他们是同层级的。

接下来是contour-2a,可以认为是轮廓-2的孩子,或者反过来,contour-2是contour-2a的父亲,所以它在hierarchy-1里。类似的contour-3是contour-2的孩子,在下一层级。最后contour4,5是contour-3a的孩子,它们在最后的层级。

OpenCV里的层级表示

每个轮廓有他自己的关于层级的信息,谁是他的孩子,谁是他的父亲等。OpenCV用一个包含四个值得数组来表示:[Next, Previous, First_Child, Parent]

"Next表明同一层级的下一个轮廓"

比如,在我们的图片里的contour-0,水上hi他相同层级的下一个轮廓?是contour-1,所以Next=1,对于Contour-1,下一个是contour-2,所以Next=2

那对于contour-2呢?没有同层级的下一个轮廓,所以Next=-1。那么对于contour-4呢?同层级的下一个是contour-5,所以下一个轮廓是contour-5.Next=5

"Previous指同层级的前一个轮廓"

和上面一样,contour-1的前一个是contour-0.contour-2的前一个contour-1.对于contour-0没有前序,所以-1

"First_Child指它的第一个孩子轮廓"

不用解释,对于contour-2,孩子是contour-2a,所以这里是contour-2a的索引,contour-3a有两个孩子,但我们只取第一个,是contour-4,所以First_Child=4.

"Parent指它的父轮廓索引"

和First_Child相反,contour-4和contour-5的parent都是contour-3a,对于contour-3a,是contour-3

注意:
如果没有孩子或者父亲,就为-1

我们知道了层级,现在来看OpenCV里的轮廓获取模式,四个标志cv2.RETR_LIST, cv2.RETR_TREE, cv2.RETR_CCOMP, cv2.RETR_EXTERNAL表示啥?

轮廓获取模式

1.RETR_LIST

这是最简单的一个,它获取所有轮廓,但是不建立父子关系,他们都是一个层级。

所以,层级属性第三个和第四个字段(父子)都是-1,但是Next和Previous还是有对应值。

下面是结果,每行是对应轮廓的层级信息。

>>> hierarchy

2.RETR_EXTERNAL

如果用这个模式,它返回最外层的。所有孩子轮廓都不要,我们可以说在这种情况下,只有家族里最老的会被照顾,其他都不管。

所以在我们的图像里,有多少最外层的轮廓呢,有3个,contours 0,1,2

3.RETR_CCOMP

这个模式获取所有轮廓并且把他们组织到一个2层结构里,对象的轮廓外边界在等级1里,轮廓内沿(如果有的话)放在层级2里。如果别的对象在它里面,里面的对象轮廓还是放在层级1里,它的内沿在层级2.

看下面的例子,轮廓的顺序为红色,他们的层级是绿色,

看第一个轮廓,contour-0,他的层级是1,他有两个洞,contours1和2,他们都属于层级2,所以对于contour-0,Next是contour-3,没有前序,他的第一个孩子是contour-1,没有parent,所以层级数组是[3,-1,1,-1]

看contour-1,他在层级2里,Next是contour-2,没有前序,没有孩子,parent是contour-0,所以数组是[2,-1,-1,0]

同样对于contour-2,也在层级2里,没有next,前序是contour-1,没有孩子,parent是contour-0,所以[-1,1,-1,0]。

contour-3:next是contour-5,Previous是contour-0,Child是contour-4,没有parent,所以[5,0,4,-1]

contour-4:在层级2里,没有兄弟,所以没有Next,没有Previous,没有孩子,parent是contour-3,[-1,-1,-1,3]

4.RETR_TREE

最后,Mr.Perfect。它取回所有的轮廓并且创建完整的家族层级列表,它甚至能告诉你谁是祖父,父亲,儿子,孙子。。

比如把上面的图形用cv2.RETR_TREE,

对于contour-0:层级是0,Next是contour-7,没有previous,孩子是contour-1,没有parent,所以[7,-1,1,-1]

contour-1:在层级1里,没有同级的其他轮廓,没有previous,孩子是contour-2,所以[-1,-1,2,0]

OpenCV里的直方图

Ⅲ python语言采用什么区分代码层次

Python语言采用严格的“缩进”来表明程序的格式框架。缩进指每一行代码开始前的空白区域,用来表示代码之间的包含和层次关系。

1个缩进=4个空格。缩进是Python语言中表明程序框架的唯一一手段当表达分支、循环、函数、类等程序含义时,在if、while、for、def、class等保留字所在完整语句后通过英文冒号(:)结尾并在之后进行缩进,表明后续代码与紧邻无缩进语句的所属关系。

优点:

在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。

面向对象:Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。

以上内容参考:网络-Python

Ⅳ Python中建议使用几个空格表示1级缩

在 Python 中,建议使用四个空格表示 1 级缩进。

在 Python 中,缩进用来表示代码块的层级结构。它的作用与其他语言中的大括号或关键字(例如 if、for、while 等)相同,用来表示代码块的开始和结束。

Python 的缩进需要遵循一些原则,包括:

  • 使用四个空格表示 1 级缩进。

  • 相同层级的代码块应该使用相同数量的缩进。

  • 所有代码块的缩进量必须相同。

  • 不能混用空格和制表符(tab)来进行缩进。

Ⅳ Python 实现递归

一、使用递归的背景

先来看一个☝️接口结构:

这个孩子,他是一个列表,下面有6个元素

展开children下第一个元素[0]看看:

发现[0]除了包含一些字段信息,还包含了 children 这个字段(喜当爹),同时这个children下包含了2个元素:

展开他的第一个元素,不出所料,也含有children字段(人均有娃)

可以理解为children是个对象,他包含了一些属性,特别的是其中有一个属性与父级children是一模一样的,他包含父级children所有的属性。

比如每个children都包含了一个name字段,我们要拿到所有children里name字段的值,这时候就要用到递归啦~

二、find_children.py

拆分理解:

1.首先import requests库,用它请求并获取接口返回的数据

2.若children以上还有很多层级,可以缩小数据范围,定位到children的上一层级

3.来看看定义的函数
我们的函数调用:find_children(node_f, 'children')
其中,node_f:json字段
    children:递归对象

 以下这段是实现递归的核心:
   if items['children']:
 items['children']不为None,表示该元素下的children字段还有子类数据值,此时满足if条件,可理解为 if 1。
 items['children']为None,表示该元素下children值为None,没有后续可递归值,此时不满足if条件,可理解为 if 0,不会再执行if下的语句(不会再递归)。

至此,每一层级中children的name以及下一层级children的name就都取出来了

希望到这里能帮助大家理解递归的思路,以后根据这个模板直接套用就行

(晚安啦~)

源码参考: https://www.coder4.com/archives/5767

Ⅵ Python 数据处理(二十八)—— MultiIndex 分层索引

本节将介绍使用多级索引(分层索引)和其他高级索引技巧

分层或多级次索引的存在是非常有意义的,因为它打开了复杂的数据分析和操作的大门,特别是处理高维数据

从本质上讲,它允许您在较低维度的数据结构包括 Series(1d) 和 DataFrame(2d) 中存储和操作任意维度的数据

在本节中,我们将展示分层索引的确切含义,以及如何结合前面介绍的所有 pandas 索引功能使用

在 0.24.0 版本之后, MultiIndex.label 重命名为 MultiIndex.codes 。 MultiIndex.set_labels 重命名为 MultiIndex.set_codes .

MultiIndex 对象是标准 Index 对象的分层模式,它通常在 pandas 对象中存储轴标签

你可以把 MultiIndex 看成一个元组数组,其中每个元组都是唯一的。 MultiIndex 有如下创建方式

当传递给 Index 构造函数一个元组列表时,它将尝试返回一个 MultiIndex 。

下面的示例演示了初始化 MultiIndex 的不同方法。

当你想要对两个可迭代对象中的每个元素进行两两配对时,可以使用 MultiIndex.from_proct()

您也可以使用 MultiIndex.from_frame() 方法直接从 DataFrame 中构造一个 MultiIndex 。

为了方便起见,你可以直接将数组列表传递给 Series 或 DataFrame 的 index 参数来自动构造一个 MultiIndex

所有的 MultiIndex 构造函数都接受一个 name 参数,该参数存储索引级别的名称。如果没有设置,则值为 None

索引可以放在任何轴上,索引的层级也可以随你设置

这已经简化了较高层次的索引,使控制台的输出更容易看清。

注意 ,索引的显示方式可以通过 pandas.set_options() 中的 multi_sparse 选项来控制。

值得注意的是,将元组用作轴上的原子标签也是可以的

多索引之所以重要,是因为它允许您执行分组、选择和重塑操作,我们将在下面以及后续部分中描述这些操作

get_level_values() 方法能够返回特定级别的标签向量

分级索引的一个重要特性是,您可以通过标识数据中的子组的部分标签来选择数据

部分选择以一种完全类似于在常规 DataFrame 中选择列的方式,返回的结果会 "降低" 分层索引的级别

MultiIndex 会保留索引的所有已经定义了的级别,尽管它们实际上可能并没有被使用。

在对索引进行切片时,您可能会注意到这一点。例如

这样做的目的是为了避免重新计算级别,以提高切片的性能。如果你只想看某一级别,可以使用 get_level_values() 方法

可以使用 remove_unused_levels() 方法重构 MultiIndex

在具有 MultiIndex 的不同索引对象之间的操作会自动对齐

Series/DataFrames 的 reindex() 方法可以传入一个 MultiIndex ,甚至可以是一个元组列表或元组数组

Ⅶ 一个关于Python层级套层级的问题

你这完全就是二叉树的遍历呀。
http://ke..com/view/549587.htm?fr=aladdin
自己网络“二叉树的遍历”
不太明白你说的什么意思,看完二叉树的遍历,你应该就会了
http://blog.csdn.net/sjf0115/article/details/8645991 随便找的,你自己找找看

这个是python 递归遍历的 很简单 只是你说的数据结构不太清楚
http://www.cnblogs.com/yupeng/p/3414451.html

Ⅷ python按层级找出xml文件的差异

使用Python可以按层级比较XML文件的差异,可以使用lxml包中的diff函数,允许指定差异深度,而深度需要根据两个XML文件的差异而定。另外还可以使用difflib库中的diff()函数,它返回XML文件树形结构差异,可以轻松实现层级比对。

Ⅸ python代码中层次表明不需要使用空格缩进正确还是错

python代码中层次表明不需要使用空格缩进是错的。不要混合使用制表符和空格来缩进,这在跨越不同的台的时候,无法正常工作。在每个缩进层次使用单个制表符或两个或四个空格。选择这三种缩进风格之一。Python的缩进是一个优点,刚开始不是非常的习惯,慢慢就行了。

热点内容
u盘免费加密 发布:2024-11-08 07:34:51 浏览:351
英雄联盟登录密码在哪里修改 发布:2024-11-08 07:25:16 浏览:515
努比亚有没有免费云存储 发布:2024-11-08 07:08:18 浏览:569
主机什么配置可以打绝地求生 发布:2024-11-08 07:08:18 浏览:988
方舟手游如何请入火影服务器 发布:2024-11-08 07:05:57 浏览:311
ip6根服务器最新消息 发布:2024-11-08 07:05:56 浏览:334
探探存储的图片在哪里找 发布:2024-11-08 07:04:32 浏览:224
slp用什么编译器 发布:2024-11-08 07:04:16 浏览:413
三一重工天泵参数密码是什么 发布:2024-11-08 06:59:45 浏览:660
攻击服务器数据库 发布:2024-11-08 06:45:57 浏览:909