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")