python之list,tuble,dict和set

来源:互联网 发布:js 短路求值 编辑:程序博客网 时间:2024/06/05 19:16

Python重要数据结构之list, tuple, dict, set

List

  1. 创建方法:

    使用方括号[ ]创建一个list

    L = []L = ['a','b','c']
  2. 有序性:有序

  3. 可更改性:可更改

  4. 元素唯一性:可重复

  5. 访问方式:

    1. 读取/更改:

      List按照数字索引访问内容,起始索引为0不要越界

      print L[0]L[1] = 'string1'

      List可以使用负数索引完成倒序访问,起始索引为-1不要越界

      print L[-1]
    2. 添加/删除

      使用append方法可以向list末尾添加一个新元素;使用pop方法元素读出list末尾一个元素并将其删除,为pop方法指定索引号可读出并删除指定元素

      L.append("one more element")the_last_element = L.pop()the_third_element = L.pop(2)  //索引号起始为0

      使用insert方法向list的任意位置添加一个新元素, 第参数为索引号,第个是新元素

      L.insert(2,'a new element')
    3. 进阶操作

      切片(获取list中的一部分内容生成新的list)

      使用L[起始索引:终止索引]来生成一个从起始索引开始(包括起始索引)到终止索引(不包括终止索引)的list, 可以使用负数进行倒序索引

      第一个索引值缺省表示从第一个元素开始取第二个索引值缺省表示取到最后一个元素

      还可以使用L[起始索引:终止索引:间隔n]每n个数的元素取一个,即每隔n-1个元素取一个

      L = ['a','b','c','e']new_L = L[1:3]    //这时new_L包括a,b,c三个元素(索引从0开始)new_L = L[-4:-2]//这时new_L包括a,b两个元素new_L = L[:2] //这时new_L包括a,b,c三个元素new_L = L[:]  //相当于复制了一个L,new_L和L的改动互不影响new_L = L     //这样的话,new_L与L表示同一个list的两个名称,任何一个改动另外一个也变化new_L = L[::2]    //这时new_L包括a,c两个元素

      ps字符串也可以进行类似list的切片操作,将每一个字符视为一个元素,按照list的方式操作即可


Tuple

  1. 创建方法

    使用小括号( )创建一个tuple

    T = ()   //空tuple是无意义的,因为tuple一旦创建就不能修改了T = ('a','b','c')T = (1,) //只含一个整数的tuple在创建时需要加一个逗号以同普通整数区分(因为小括号可以是运算符)
  2. 有序性:有序

  3. 可更改性:不可更改

  4. 元素唯一性:可重复

  5. 访问方式:

    1. 读取

      访问方式同list,可以使用数字正序或者倒序索引,但其内容不可更改,但如果使用list作为tuple的元素,则可以通过更改list变相的改变tuple

      print T[2]    //  使用小括号创建,但仍然使用中括号索引T = ('a','b',[])

Dict

  1. 创建方法

    使用大括号来创建一个dict

    D = { 'first':'a',   //  dict以“索引:值”的方式创建,即key:value 'second':'b', 'third':'c'}
  2. 有序性:无序

  3. 可更改性:可更改

  4. 元素唯一性:value可重复, key唯一且不能为可变类型如list

  5. 访问方式

    1. 读取/更改

      使用key来索引访问,类似于list (访问到不存在的key会报错);

      使用in操作符可以判断key是否存在

      使用get方法通过key访问(key不存在时返回None

      不存在的key做索引给dict赋值可以增加新元素存在的key做索引给dict赋值会更新**key对应的**value

      print D['first']if 'first' in D:print D['first']print D.get('first')D['fourth'] = 'new_element'D['first'] = 'change_element'

set

  1. 使用set()创建一个set,传入一个list作为参数可以用list中的值初始化set

    S = set()S = set(['a','b','c'])
  2. 有序性:无序

  3. 可更改性:可更改

  4. 元素唯一性:元素唯一,且元素不能为可变类型如list

  5. 访问方式

    1. 读取

      因为set无序所以不能使用数字索引来取出特定元素,使用in运算符可以判断一个元素是否在set

      使用add方法可将一个元素添加到set中

      使用pop方法从set中取出一个元素并从set中删除

      if 'a' in Sprint "a在S中"S.add('d')print S.pop

      ps:set的元素无序,因此不能确定pop出的元素是哪一个


总结

Listtuple在内存中的组织方式相似,有序,采用数组实现,搜索效率较低;Dictset在内存中的组织方式相似,无序,占用内存较大,采用哈希表实现,搜索效率很高

​ 四种数据类型都能够存放各种类型的元素,且不需要储存的元素类型相同。需要注意的是,dict索引(key)set中的元素不能为可变的数据类型,如list。

Listtuple可以使用数字索引来正序或者倒序的访问,但tuple的元素个数和名称等是不可改变的,可以把List作为tuple的元素来变相的是tuple能够改变。

set可以用于去重复,但无法访问其中的特定元素,dict可以通过索引(key)来访问其中的元素,也可通过get方法来访问,使用in运算符,可以判断一个元素**在不在**set中或者判断在不在dict的key中。

​ 使用 for 变量 in list/tuple/dict/set 可以遍历这些结构中的值,注意,但遍历dict时for中的变量取出的是dict的key,需要通过key读出value