【笔记】Python算法教程(2)---树的实现、黑盒子

1、没有内置list类型的语言,还有另一种常见的树的实现方式,即采取“先子节点,后兄弟节点”的表示方法。每一个树节点都有两个用于引用其他节点的“指针”或属性。第一个引用指向的是当前节点的第一个子节点,第二个引用所指向的是其下一个兄弟节点。各个节点所应用的是一个(其子节点的)兄弟节点链表。

2、当树这样的数据结构被原型化时,往往是一个非常有用灵活的类型,允许我们在其构造器中设置任何属性。bunch设计模式。

 bunch设计模式能让我们以命令行参数的形式创建相关对象,并设置任何属性;由于它继承自dict类,可以自然而然地获得大量相关的内容。

3、要注意两个地方:被隐藏的性能陷阱,即相关操作看起来似乎足够好了,但可能由一个线性操作变成平方级操作;第二个是指存在于各种浮点运算中的操作。

4、list:成员查询是线性级别的;往某个集合里面新加一个数,并且检查是否已被添加,这是平方级别

      set:成员查询是常数级别;往某个集合里面新加一个数,并且检查是否已被添加,这是线性级别

      双向队列(deque)优于在某个list首端插入对象

5、Python中有join()和os.path.join()两个函数,具体作用如下:

    join():    连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串

    os.path.join():  将多个路径组合后返回

    join()函数

    语法:  'sep'.join(seq)

    参数说明:

    sep:分隔符。可以为空

    seq:要连接的元素序列、字符串、元组、字典

    上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串

    返回值:返回一个以分隔符sep连接各个元素后生成的字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#对序列进行操作(分别使用' '与':'作为分隔符)
  
>>> seq1  =  [ 'hello' , 'good' , 'boy' , 'doiido' ]
>>>  print  ' ' .join(seq1)
hello good boy doiido
>>>  print  ':' .join(seq1)
hello:good:boy:doiido
  
  
#对字符串进行操作
  
>>> seq2  =  "hello good boy doiido"
>>>  print  ':' .join(seq2)
h:e:l:l:o: :g:o:o:d: :b:o:y: :d:o:i:i:d:o
  
  
#对元组进行操作
  
>>> seq3  =  ( 'hello' , 'good' , 'boy' , 'doiido' )
>>>  print  ':' .join(seq3)
hello:good:boy:doiido
  
  
#对字典进行操作
  
>>> seq4  =  { 'hello' : 1 , 'good' : 2 , 'boy' : 3 , 'doiido' : 4 }
>>>  print  ':' .join(seq4)
boy:good:doiido:hello
  
  
#合并目录
  
>>>  import  os
>>> os.path.join( '/hello/' , 'good/boy/' , 'doiido' )
'/hello/good/boy/doiido'


6、Python的元组与列表类似,不同之处在于元组的元素不能修改。 

元组使用小括号,列表使用方括号。 

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

创建空元组

tup1 = ();

元组中只包含一个元素时,需要在元素后面添加逗号

tup1 = (50,);

元组与字符串类似,下标索引从0开始,可以进行截取,组合等。

7、不要对浮点数进行等值比较。在需要进行这种运算的场合下,可以使用round函数。

     还可以使用decimal模块,这样就使用的是精确的十进制浮点数表示法。

from decimal import *
sum(Decimal("0.1") for i in range(10))==Decimal("1.0") 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值