python的基本数据结构

文章目录

终于决定学习下python了,受到多位同事、同学一直以来的安利,但一直没有无缘python。
好在最近有点闲功夫,就想着看看python吧。

对于一位有着其他编程语言经验的人而言,抱起一本python基础教程从头看起实在是有些浪费时间,
基本的语句语法,看看实际代码就基本了解各二三了,至于逻辑控制流程,关键字之类的,现在市面的各类开发语言难道不是大同小异吗?

所以,就挑一些关键的不同点,以及一些编程必须完全掌握的基础点。

对于python,我花了几个小时的时间看了《Python基础教程.第二版》的前八章,觉得数据结构列表和元组这块应该是和我以前掌握的语言(C++、Java)有所不同,有必要做些记录,一方面加深记忆,一方面避免以后从头开始在厚重的书籍里查使用方法。

1.序列

1
2
3
database1 = ['John Smith', 50]
database2 = [[1, 2], [3, 4], [5]]
database3 = [database1, database2]

列表的元组都属于序列,序列有一些通用的操作。字符串是字符组成的序列。

索引

1
2
3
4
5
greeting = 'Hello'
greeting[0]
'H'
greeting[-1]
'o'

分片

1
2
3
4
5
6
7
8
9
numbers = [1, 2, 3 , 4, 5]
numbers[3:4]
[4]
>>> numbers[-2:]
[4, 5]
>>> numbers[:3]
[1, 2, 3]
>>> numbers[:]
[1, 2, 3 , 4, 5]

分片提供两个索引作为边界,第一个在分片内,第二个不在,类似数学里“[)”的关系。[0:4:1]这样第三个可以实现步长分片。

序列加

1
2
>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]

序列乘

1
2
>>> [1] * 3
[1, 1, 1]

成员资格

1
2
3
>>> users = ['John', 'foo', 'rew']
>>> 'foo' in users
True

长度最大最小判定

len(),min(),max()都是函数风格,容易理解,不赘述。

2.列表(可修改的序列)

序列的用法都能用,另一些操作方法也是一看即懂:

1
2
3
4
list()
x[1] = 2
del names[2]
name[2:] = list('ar')

常用函数:append();count();extend();index();insert();pop();remove();reverse();sort().

都是各个语言里的老套路的,看命名都懂的。。。

3.元组(不可变的序列)

1
2
3
4
>>> 1, 2, 3
(1, 2, 3)
>>> tuple([1, 2, 3])
(1, 2, 3)

元组的存在意义,

1.可在映射中当键使用;

2.作为内建函数和方法的返回值存在,不允许修改,只读的序列数据。

4.字典(内建的映射类型)

各种书里、教程里一堆废话,通俗讲,一大波键值对的集合而已。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
people = {
'Alice': {
'phone': '2341',
'addr': 'Foo drive 23'
},
'Beth': {
'phone': '9102',
'addr': 'Bar street 42'
},
'Cecil': {
'phone': '3158',
'addr': 'Baz avenue 90'
}
}

以上是一个嵌套的字典例子,还可以用dict()函数通过其他映射或序列建立字典,老套路操作:

  • len(d) 返回数量
  • d[k] 返回键k的值
  • d[k]=v k键上赋值
  • del d[k] 删除
  • k in d 包含、存在检查

常用方法,看名秒懂:clear(),get(),pop(),popitem(),

copy()(这个方法是浅拷贝,否则用deepcopy()),

fromkeys()(创建给定键的字典,值为None),

has_key()(3.0貌似没了?),

items()和iteritems()将字典以列表发回,后者返回迭代器对象,

keys()和iterkeys()同上理,

values()和itervalues()同上理,

setdefault()有就返回,无则更新,

update()以一个字典更新另一个字典。

就记录这么多了,掌握以上列表、元组、字典,基本就可以应付的python大部分日常处理了,相应的一些开源代码也能看个一知半解了!


版权声明:

本文由greedcoder创作、发表并维护,

采用自由分享-保留署名-非商用-禁止演绎4.0(CC BY-NC-ND 4.0)国际许可协议进行许可.

版权有一点,侵权不一定究!

本文永久链接:https://greedcoder.github.io/2016/08/21/python-base-data-structure/