龙空技术网

Python数据分析笔记#2 数据结构

Yuan的学习笔记 543

前言:

今天同学们对“python基础数据结构”大概比较讲究,你们都想要知道一些“python基础数据结构”的相关资讯。那么小编同时在网上搜集了一些对于“python基础数据结构””的相关知识,希望各位老铁们能喜欢,看官们快快来学习一下吧!

目录

元组列表字典集合

Python的数据结构和序列

本篇写的是Python的内置功能,从最基本的数据结构开始:元组,列表,字典和集合

元组

元组是一个固定长度,不可改变的Python序列对象。创建元组的最简单方式,是用逗号分隔一组值:

In [1]: tup = 4, 5, 6In [2]: tupOut[2]: (4, 5, 6)

或者把值放入括号里面:

In [3]: tup = (4, 5, 6), (7, 8)In [4]: tupOut[4]: ((4, 5, 6), (7, 8))

tuple可以将任意序列或迭代器转换成元组

In [5]: tuple([4, 0, 2])Out[5]: (4, 0, 2)In [6]: tuple('string')Out[6]: ('s', 't', 'r', 'i', 'n', 'g')

可以用方括号访问元组中的元素,序列从0开始:

In [7]: tup = tuple('string')In [8]: tup[0]Out[8]: 's'

可以用加号运算符将元组合并:

In [9]: (4, None, 'foo') + (6, 0) + ('bar',)Out[9]: (4, None, 'foo', 6, 0, 'bar')

元组乘以一个整数会将几个元组复制串联起来

In [10]: ('foo', 'bar') * 4Out[10]: ('foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar')

我们可以将元组赋给类似元组的变量

In [11]: tup = (4, 5, 6)In [12]: a, b, c = tupIn [13]: cOut[13]: 6

Python还有更高级的元组拆分功能,使用*rest(rest是任意名字)可以抓取剩下的元素

In [14]: values = 1, 2, 3, 4, 5In [15]: a, b, *rest = valuesIn [16]: a, bOut[16]: (1, 2)In [17]: restOut[17]: [3, 4, 5]

如果rest部分不想要,许多程序员的惯用写法是用下划线代替不需要的变量名:

a, b, *_ = values

元组的大小和内容不能修改,所以元组的方法较少。但我们可以用count统计某个值出现的次数

In [18]: a = (1, 2, 2, 2, 3, 4, 2)In [19]: a.count(2)Out[19]: 4

列表

与元组对比,列表的长度可变,内容可以被修改。可以用方括号list函数定义:

a_list = [2, 3, 7, None]tup = ('foo', 'bar', 'baz')b_list = list(tup)

1.添加或删除元素

可以用append列表末尾添加元素:

In [20]: b_list = ['apple', 'banana', 'orange']In [21]: b_list.append('grape')In [22]: b_listOut[22]: ['apple', 'banana', 'orange', 'grape']

可以用insert特定的位置插入元素

In [23]: b_list.insert(1, 'peach')In [24]: b_listOut[24]: ['apple', 'peach', 'banana', 'orange', 'grape']

pop是insert的逆运算,它移除并返回指定位置的元素

In [25]: b_list.pop(2)Out[25]: 'banana'

remove可以去除某个值,remove会先寻找第一个值并除去

In [26]: b_list.append('apple')In [27]: b_listOut[27]: ['apple', 'peach', 'orange', 'grape', 'apple']In [28]: b_list.remove('apple')In [29]: b_listOut[29]: ['peach', 'orange', 'grape', 'apple']

in可以检查列表是否包含某个值

In [30]: 'orange' in b_listOut[30]: TrueIn [31]: 'orange' not in b_listOut[31]: False

在列表中检查是否存在某个值远比字典和集合速度慢,因为Python是线性搜索列表中的值,但在字典和集合中同样时间可以检查更多项(基于哈希表)。

2.串联和组合列表

与元组类似,可以用加号将两个列表合并。

已经定义一个列表后,用extend方法可以追加多个元素

In [32]: x = ['a', 'b', 'c']In [33]: x.extend(['d', 'e', 'f'])In [34]: xOut[34]: ['a', 'b', 'c', 'd', 'e', 'f']

通过加法将列表组合的计算量较大,因为要新建列表,再复制对象

3.排序

sort函数可以将一个列表原地排序

In [35]: a = [7, 2, 5, 1, 3]In [36]: a.sort()In [37]: aOut[37]: [1, 2, 3, 5, 7]

sort函数括号中可以加排序关键字key,例如按长度对字符串进行排序:

In [38]: b = ['apple', 'orange', 'pie', 'lemon']In [39]: b.sort(key=len)In [40]: bOut[40]: ['pie', 'apple', 'lemon', 'orange']

sorted函数则可以产生一个排好序的副本

4.二分搜索

bisect模块支持二分查找和向已排序的列表插入值bisect.bisect可以找到插入值后仍保持顺序的位置bisect.insort向这个位置插入值

In [41]: import bisectIn [42]: c = [1, 2, 2, 2, 3, 4, 7]In [43]: bisect.bisect(c, 2)Out[43]: 4In [44]: bisect.bisect(c, 5)Out[44]: 6In [45]: bisect.insort(c, 6)In [46]: cOut[46]: [1, 2, 2, 2, 3, 4, 6, 7]

5.切片

切片可以选取序列的一部分,基本形式是:

sequence[start:end]
In [47]: seq = [7, 2, 3, 7, 5, 6, 0, 1]In [48]: seq[1:5]Out[48]: [2, 3, 7, 5]

切片可以被序列赋值:

In [49]: seq[3:4] = [6, 3]In [50]: seqOut[50]: [7, 2, 3, 6, 3, 5, 6, 0, 1]

切片的开始和结束可以省略

In [51]: seq[:5]Out[51]: [7, 2, 3, 6, 3]In [52]: seq[3:]Out[52]: [6, 3, 5, 6, 0, 1]

负数的话可以从后往前开始:

In [53]: seq[-4:]Out[53]: [5, 6, 0, 1]In [54]: seq[-6:-2]Out[54]: [6, 3, 5, 6]

通过第二个冒号可以选择步伐:

In [55]: seq[::2]Out[55]: [7, 3, 3, 6, 1]

6.列表推导式

列表推导式允许用户从一个集合方便的过滤元素或者修改元素:

In [56]: strings = {'a', 'as', 'bat', 'car', 'dove'}In [57]: [x.upper() for x in strings if len(x) > 2]Out[57]: ['DOVE', 'BAT', 'CAR']

这个列表推导式等同于

strings = ['a', 'as', 'bat', 'car', 'dove']a = []for x in strings: if len(x) > 2:          a.append(x.upper())

字典

字典是键值对的可变集合,创建字典的方法之一是使用花括号,用冒号分隔键和值:

empty_dict = {}d1 = {'a':'some value', 'b':[1, 2, 3, 4]}

添加新的键值对:

In [58]: d1 = {'a':'some value', 'b':[1, 2, 3, 4]}In [59]: d1[7] = 'an integer'In [60]: d1Out[60]: {'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer'}

delpop方法可以删除键值对

In [63]: d1['dummy'] = 'another value'In [64]: d1Out[64]:{'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer', 5: 'some value', 'dummy': 'another value'}In [65]: del d1[5]In [66]: d1Out[66]:{'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer', 'dummy': 'another value'}In [67]: ret = d1.pop('dummy')In [68]: retOut[68]: 'another value'In [69]: d1Out[69]: {'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer'}

查看字典的键:

In [70]: list(d1.keys())Out[70]: ['a', 'b', 7]

查看字典的值:

In [71]: list(d1.values())Out[71]: ['some value', [1, 2, 3, 4], 'an integer']

update方法可以将两个字典融合

In [72]: d1.update({'b':'foo', 'c':12})In [73]: d1Out[73]: {'a': 'some value', 'b': 'foo', 7: 'an integer', 'c': 12}

字典的键通常是不可变的标量类型(整数,浮点型,字符串)或元组,字典的值可以是任意类型

集合

集合是无序的不可重复的元素的集合。可以用set函数花括号创建。

In [74]: set([2, 2, 2, 1, 3, 3])Out[74]: {1, 2, 3}In [75]: {2, 2, 2, 1, 3, 3}Out[75]: {1, 2, 3}

union方法|运算符对两个集合求并集

In [76]: a = {1, 2, 3, 4, 5}In [77]: b = {3, 4, 5, 6, 7, 8}In [78]: a.union(b)Out[78]: {1, 2, 3, 4, 5, 6, 7, 8}In [79]: a | bOut[79]: {1, 2, 3, 4, 5, 6, 7, 8}

intersection&运算符对两个集合求交集

In [80]: a.intersection(b)Out[80]: {3, 4, 5}In [81]: a & bOut[81]: {3, 4, 5}

下面这张表列出了常用的集合方法

标签: #python基础数据结构