数据结构:

  从计算机存储,组织数据的结构

四种常用的数据结构:
  1.列表(List)

  2.元组(Tuple)

  3.字典(Dictionary)

  4.集合(Set)

1.列表List(最基础也是最简单的数据结构)

  列表中有两种索引方式:

    正序索引(第一个元素索引下标为0开始)和倒序索引(最后一个元素索引下标为-1)

  列表中可以存储任何类型的数据:

    例:变量名 =  ["元素1","元素2"..]

  列表范围取值:

    变量名 = [起始索引 : 结束索引]  需要注意在Python中列表取值范围是“左闭右开”(最右边的索引指向的数值不取)

  列表的index函数:

    用于获取指定元素的索引值,但是只能返回遇到的第一个元素。例:List.index("张三")。在这里如果要获取所有相同元素的索引值,需要变量列表。

  列表的遍历(for循环):

    for...in... 语句:  其中in是成员运算符,用于判断数据是否存在列表中,存在返回true,否则为flase

      for 迭代变量 in 可迭代对象:

        循环体(要记得缩进)

  获取列表的长度:

    len(列表名)函数

  解决完善上面提出的问题:

      perosn = ["张三" , "李四" , "王五" , "赵六" , "王五"]
      i= 0 #正序
      count = len(perosn) #长度
      for p in perosn:
       ri = count * -1 + i #倒序
      if p == "王五":
     print(p ,i ,ri)
       i+=1

  列表的翻转与排序:

    翻转:列表名.reserve()函数

    排序:列表名.sort()函数 默认升序排列  列表名.sort(reserve = true) 降序排序

  列表的增,删,改:

    list.append(新元素)  在列表末端追加新元素

    list.insert(索引,新元素)  在指定索引插入新元素

    list[索引] = 新值   更新指定索引位置数据

    list[起始索引:结束索引] = 新列表  更新指定范围数据

    list.remove(元素)  删除指定元素

    list.pop(索引)  按索引删除指定元素

    list[起始索引:结束索引] = []  大范围删除元素

  其他常用函数:

    list.count()  统计元素出现次数

    list.extend()  扩展列表  注:append将整个列表追加到末尾,extend则是将列表中的元素最加到原始列表末尾

    list.copy()  用于复制列表

    list。clear()  用于清空列表

    身份运算符 is 用于判断两个变量是否指向同一个内存区域

  列表小demo ——> 移步到Python数据结构demo

  列表存储数据的缺陷:列表在表达结构化数据(指有明确属性,明确表示规则的数据)时语义不明确

 

2.字典Dictionary(适合表达结构化数据,是Python中内置的数据结构)

  字典采用key:value的形式表达数据。key不允许重复。

  字典的创建方式有两种:
    1.{}  2.dict函数  例:dict1 = {'name' : 'cia鸟','age' : '22'}  dict2(name = 'cia鸟', age = '22')

    fromkeys函数 —> 初始化字典value值  例:dict.fromkeys(['name','age','weight'],'N/A')

  字典的取值操作:

    1.字典名['key']直接获取  2.使用get函数获取

    get函数 —> 提供生成不存在的key值的方法并可以为其赋值 例:dict.get('salary','8000')

  遍历字典:
    1.for key in 字典名:

    2.for k,v in 字典名.items():

  字典的更新和删除:
    update函数 —> 字典名.update(key = new value)

    字典的新增操作和更新操作完全相同,秉承有则更新,无则新增原则

    删除操作:1.pop函数 —> 删除指定的kv  2.popitem函数 —> 删除最后一个kv  3.clear函数 —> 清空字典

         例:字典名.pop(key)

  字典的常用操作:

    1.setdefault()函数 —> 为字典设置默认值,如果key已存在则忽略,否则设置

    2.获取字典的视图  keys()/values()/items()

  字典格式化字符串:
    1.老版本格式化方法:str = "姓名:%(name)s,年龄:%(age)s"%(字典名)

    2.新版本格式化方法3.0以上:str = "姓名:{name},年龄:{age}".format_map(字典名)

  散列值(hash)和字典的存储原理:

    字典也称为“哈希”,对应“散列值”,散列值是从任何一种数据中创建数字的指纹。Python中提供了hash()函数生成散列值。

    数字的散列值是本身。key 转换—> hash() 存储—> 内存地址/value

  字典小demo ——> 移步到Python数据结构demo

 

3.元组Tuple(“不可变”的列表)

  元组使用小括号,列表使用大括号

  元组只认括号内有没有逗号,有则为元组,没有则为算数优先级运算符

  元组的读与写:
    1.元组的读取方式与列表基本相同  2.元组的元素在创建后不允许修改,若元组内持有列表,那么列表的内容是允许被修改的  3.元组允许使用“元组运算符”来创建新元组

  元组的创建:

    例:tup = ('a','b',1,2,3)

  元组运算符(元组运算符同样适用于列表):
    运用运算符简化元组的操作

    例:tup = (1,2,3) + (4,5,6)  输出(1,2,3,4,5,6)

      tup = ('cia','niao')*2  输出('cia','niao','cia','niao')

  注:如果元组只有一个元素时,必须在这个元素后面增加一个逗号说明这是一个元组

    例:t = (10,) —> 为只有一个元素的元组

      t = (10) —> 不是一个元组,括号只表示算数优先级

  列表和元组的区别:

列表 元组
内容允许扩展 内容不可变
内存存储动态变化 创建后固定不变
效率较低 效率最高
运行时数据变更使用 用于保存稳定不变的数据
保存天气数据,股市数据 保存国家名,元素周期表

补充:

  序列(不是某一种数据类型,是一类数据结构的统称):

    1.序列中的元素顺序按添加顺序排列  2.序列中的数据通过“索引”进行获取

  序列包含常用数据结构:

    字符串str  列表list  元组tuple  数字序列range

  数字序列range:

    1.range内容不可变  2.使用range()函数创建  3.语法:r = range(0,100) #产生0~99数字序列,左闭右开  4.range的第三参数可以选择使用,为步长即间距

   利用range遍历序列list:
    for i in range(0,len(list)): print(list[i])

  使用range列出斐波那契数列 —> 移步到Python数据结构demo

  序列类型的互相转换:
    list() - 转换为列表  tuple() - 转换为元组  join(),str() - 转换为字符串

l1 = ['a', 'b', 'c']
t1 = ('d', 'e', 'f')
s1 = 'abc123'
s2 = 'abc,123'
r1 = range(1, 40)
# list() - 转换为列表
l2 = list(t1)
print(l2)
print(list(s1))
print(s2.split(","))
print(list(r1))

# tuple() - 转换为元组
print(tuple(l1))
print(tuple(s1))
print(tuple(s2.split(",")))
print(tuple(r1))

# str函数用于将单个数据转为字符串 join对列表进行连接
print(str(l1))
print(",".join(l1))
print("|".join(t1)) #join必须要求所有元素都是字符串
s3 = "" #将包含数字的序列输出
for i in r1:
s3 += str(i)
print(s3)

 

4.集合Set(可以看做没有value的字典)

  集合的特点:

    1.集合元素是无序的  2.集合元素不能重复  3.集合是可变的  4.集合允许数学运算  5.集合是分散存储的

  集合存储原理(集合存储效率高,但是浪费内存空间):

    集合(转换) —> hash()(存储) —>  内存地址/数据

  集合的创建:

    1.使用{}直接创建  2.使用set函数从其他数据类型转换

   例:set = {“CIA”,“鸟”}  set([“CIA”,“鸟”])

    使用set创建字符串集合 例:set("一只cia鸟") —> {无序输出字符集}

  空字符的创建:
    college = {} —> 创建的是字典

    需要加上 college = set() 进行转换 —> 创建集合 

  集合的数学运算:
    交集intersection() / intersection_update(),并集union(),差集difference() / difference_update() / symmetric_difference() 双向差集

    子集issubset(),父集issuperset(),isdisjoint()判断是否存在重复元素    用法:a.方法名(b)

  集合的遍历:

    for i in set:

  判断元素存在:

    in运算符,集合不支持按索引查找数据(无序)

  集合的增,删,改:

    1.增 add()一次添加一个  update()一次添加多个

    2.删 remove()不存在会报错  discard()不存在则忽略删除操作

    3.改 更新需要先将原有的数据删除再添加,比较麻烦

常用生成式:

  生成式中可以写多个循环和判断的语句
    1.列表生成式  例:list = [i*10 for i in range(0,10) if i%2 == 0]  等价于 list=[] for i in range(0,10) if i%2==0 list.append(i*10)

    2.字典生成式  例:lsit = ["一只","CIA鸟"] dict = {i:list[i] for i in range(0,len(list))}

    3.集合生成式  例:set = {i for i in range(1,4)}

Posted on 2020-05-23 21:07  Schrodinger'sdoris  阅读(394)  评论(0)    收藏  举报