zoukankan      html  css  js  c++  java
  • Python:数据结构(list, tuple, Dict & Set)

    list: Python中内置的有序数据结构,即数组。由于Python是动态语言,因此数组元素的类型没有限定。

    • classmates = [“Michael”, “David”,”Bob”,”Tracy”]
    • 空列表:empty_list = []
    • 使用负数来表示倒叙,即索引-1来表示最后一项:classmates[-1]打印出Tracy,classmates[-4]打印出Michael,注意倒叙不是从0开始,因为-0和0没区别。
    • list.insert(index, data) 在指定的位置插入指定内容。
    • list.append(new_list) 在list结尾将整个new_list作为一个元素插入。
    • list.extend(new_list)在list结尾将new_list的元素逐一插入。
    • list.pop()返回并删除list的最后一个元素。
    推导公式的多层嵌套:
    # 例:打印1~999中个位数和百位数相同的数字,每个for/if语句都是包含的关系。
    1 print(x*100 + y*10 + z for x in range(10) for y in range(10) for z in range(10) if x > 0 and x == z)
    for语句中获得list下标:enumerate(list)会将list转换成(index,item)的tuple。
     1 >>> L=['abc','bcd','cde']
     2 >>> for n in enumerate(L):
     3 ...     print(n)
     4 ... 
     5 (0, 'abc')
     6 (1, 'bcd')
     7 (2, 'cde')
     8  >>> for index,item in enumerate(L):
     9 ...     print(index,',',item)
    10 ... 
    11 0 , abc
    12 1 , bcd
    13 2 , cde 
    click me
     
    tuple:不可变的列表
    • list使用的是中括号[]声明,tuple使用小括号()声明。
    • 由于tuple不可变,自然也就无法使用insert()/append()/extend()/pop()等方法。
    • ()可以创建不同元素数量的tuple,但注意当tuple的元素只有一个的时候,要使用逗号:a_tuple=(1,)
      • 因为没有逗号的话会被当做是四则运算中的括号,为免混淆会多了一个逗号。
    • tuple的不可变指的是元素地址的不可变,而元素如果是引用类型,则所引用的地址是可变的。例如tuple的元素中有一个list,则该list的内容可变。
     
    dict (字典/dictionary):
    • key-value的格式,其实就是JSON。
    • 1 dict1 = {
      2     'Adam' : 95,
      3     'Lisa' : 85,
      4     'Bart' : 59,
      5     'Paul' : 75
      6 }
      click me
    • 可通过BIF: len(dict) 查看dict的长度。
    dict的三个特点:
    • 查找速度:比list快,相对地占用较大内存。
    • 元素无序。
    • key必须是不可变且不可重复,如字符串、整数、浮点数
    操作dict
    • 添加一个item: dict[‘key’]=value
    • 获取dict的key集合:dict.keys()
    • 获取dict的values集合:dict.values()
    • 获取个key-value pair的tuple:dict.items()

    dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。

    不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。 

     
    set
    • 无序、不重复(对大小写敏感)
    • 可通过BIF:set(list)来创建
    • 通过in来判断item是否在set中:’Paul’ in s >> True

    set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。

    set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。 

    参考资料:

  • 相关阅读:
    1245. Tree Diameter
    771. Jewels and Stones
    830. Positions of Large Groups
    648. Replace Words
    647. Palindromic Substrings
    435. Non-overlapping Intervals
    646. Maximum Length of Pair Chain
    645. Set Mismatch
    242. Valid Anagram
    438. Find All Anagrams in a String
  • 原文地址:https://www.cnblogs.com/lawrencechen/p/4371408.html
Copyright © 2011-2022 走看看