核心数据结构

一、什么是数据结构
在计算机科学中,数据结构(英语:data structure) 是计算机存储、组织数据的方式。

1.Python中核心数据结构分类

  • 序列类型:;字符串、列表、元组
  • 泛映射类型:字典
  • 集合:set()

在Python中列表、元组、字典、集合都称为容器。

2.序列类型数据结构共有的特点:

  • 序列类型中的元素都有对应的位置,这个位置叫偏移量或者索引

二、列表
1.列表的也行介绍

  • 列表内的元素是可变的。
    列表的元素可以是Python的任何类型的数据和对象
如:字符串、列表、元组、字典、集合、函数、类
  • 列表中的具有相同值的元素允许出现多次
[1,2,1,1,1,1,3,3,2]

2.创建列表

li = []

嵌套的列表
列表中可包含python中任何类型的元素(对象),当然也可以包括一个或多个列表

li = [['one','two','three'],[1,2,3]] 

嵌套的列表

l2 = [['one', 'two', 'three'], [1, 2, 3]]
l2[0][1]  # two

切片
和字符串的切片一样
示例

li_f = [ 'insert', 'append','extend', 'remove', 'pop', 'sort', 'sorted']

# 获取全部元素
li_f[:]

# 反转
li_f[::-1]

len()
方法是一个内置函数,可以统计序列类型的数据结构的长度。

n=len(li)
print(n)

in
判断元素是否存在于列表中

if 5 in li:
  print('要努力')

append()
向列表的最后位置,添加一个元素,只接收一个参数

li.append('a')
print(li)

insert()
向原列表的指定位置插入一个元素,接收两个参数,第一个是索引号,第二个是要插入的元素

li.insert(0,'b')
print(li)

extend()
可以把一个序列类型中的每个元素追加到原列表中,接收的参数是一个序列类型的数据(字符串,列表)。

l2 = ['qwe','qwe']
li.extend(12)
print(li)

remove()
移除列指中某个指定元的元素,没有返回值,并且假如有多个相同的元素存在,每次只会移除排在最前面的那个元素

obj.remove('a')

pop()
从原列表中删除一个元素,并且把这个元素返回。
接收另个或者一个参数,参数是偏移量,int类型

#删除列表中的最后一个元素
li.pop()
#删除列表中第二个索引号对应的元素,并且返回这个元素,用变量名n接收
n = li.pop(2)

' '.join()
把列表中的元素拼接起来,返回的是字符串类型

c = [a,b]
s = ' '.join(c)
print(s)

#输出
'ab'

还可以以指定的字符进行拼接

c = ['a','b']
s = '-'.join(c)
print(s)

# 输出
'a-b'

index 返回指定元素的索引号。

idx = li.index(4) 
print(idx)
  • count() 是列表的内置方法,可以统计出相同值的元素在列表中总共
    出现都少次.
num = obj.count(4)
print(num)

sort()
是列表的内置方法,对列表中元素进行排序。
默认是升序, 这个改变列表自身。
还可以接收一个 reverse (反转) 参数, 其值可以是 True 和 False。
False 是升序,True 是降序。需要是同一种数据类型,比如都是字符串,或都是整型。

示例:

l5 = [2, 4, 23, 34, 100]

l5.sort(reverse=True)

print(l5)
# 输出:
[100, 34, 23, 4, 2]

sorted()
是 python 的内置函数,接受一个参数,参数可以是任意序列类型的数据,但是元素的类型必须相同.
比如是含有都是 str 的列表,或者是含有都是 int 的列表
它会返回一个新的类别,原列表不变。

li = [2,10,3,7]
l10 = sorted(li)  
print(li)
print(l10)
  1. 通过索引和切片修改列表
    索引号
In [11]: int_number = [1,2,3,4,5]
    
In [12]: int_number[2]=20
    
In [13]: int_number
Out[13]: [1, 2, 20, 4, 5]

切片

li = [1, 2, 3, 4, 5]
li[1:3] = [0]
print(li)
  1. 引用赋值
In [192]: a
Out[192]: ['6', '5', '3', '1', '1']

In [193]: b = a

In [194]: b
Out[194]: ['6', '5', '3', '1', '1']

In [195]: a[-2]=2

可以看到,这种用等号将一个列表赋值给多个变量时,使用其中任意一个变量对列表的操作,结果都会同步到其他变量的值。
在这种现象中,就像前面学到的变量的赋值,变量和列表本身之间的关系称作,变量对列表对象的引用,并没有创建一个新的列表。

解决方法

  • 使用以下任意一种方法,都可以将原列表的值赋值给一个新的列表
    1.列表的内置函数 obj.copy()
    2.序列类型函数 list(obj)
    3.列表切片
    以上方法得到的列表可赋值给一个新的变量, 这变量各自有自己的列表对象,互相之间不会影响
  1. 深浅拷贝
    简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存
In [110]: base_count = ['name',['money',100.00]]

In [111]: xmen = list(base_count)

In [112]: xpan = base_count.copy()

In [113]: xmen[1][1] = 20.00

In [114]: xpan
Out[114]: ['name', ['money', 20.0]]

三、元组

1 元组特性介绍

  • 元组和列表一样,也是一种序列。
  • 唯一的不同是,元组是相对不可变的。

2 高效创建元组

t1 = ()    # 创建 空 元素的元组

创建非空元素的元组是用逗号,而不是用小括号
tuple()
可以对其他序列类型的数据转换为元组。

In [173]: s1 = 'car'

In [174]: li = [1,2,3]

In [175]: tuple(s1)
Out[175]: ('c', 'a', 'r')

In [176]: tuple(li)
Out[176]: (1, 2, 3)

In [177]: dl = [1,2,3,['a','b']]

In [178]: tuple(dl)
Out[178]: (1, 2, 3, ['a', 'b'])

3 、使用元组的理由

给我一个理由
1.占用内存空间小
2.元组内的值不会被意外的修改
3.可作为字典的键
4.函数的参数是以元组形式传递的
5.命名元组有时候可以代替类的对象(面向对象的时候讲)

你可能感兴趣的:(核心数据结构)