Python Data Structures

2017-08-11

Data Structures

List

  • Sequence Type
  • listname = [“a”, “b”, “c”]
  • 列表是有序的,可存储不同的数据类型,但常用做法是存储相同类型的数据。
  • 列表是可迭代的(iterable),即可通过下标获取元素。如: list[0] = “a”
  • 列表有下列方法:
    • list.append(x): 在list最后加上元素x。等价于: a[len(a):] = [x]
    • list.extend(iterable): 在list最后加上一组可迭代的元素。等价于: a[len(a):] = iterable
    • list.insert(i, x): 在list下标为i的元素前插入新的元素x。
    • list.remove(x): 移除list中值为x的第一个元素。如果么有该值,则会报错。
    • list.pop([i]): 移除list中下标为i的元素并返回该元素。如果省略i,则移除list中最后一个元素并返回该元素。
    • list.clear(): 移除list中所有元素。等价于: del a[:]
    • list.index(x[, start[, end]]): 返回list中第一个值为x的元素的下标。可选参数start和end为搜索范围,所有下标都是从0开始的。
    • list.count(x): 返回list中值为x的元素的个数。
    • list.sort(key=None, reverse=False): 给list中的元素按其unicode编码值排序,默认为升序。如果list中保存的不是同一类型的,则会报错。该sort()方法直接修改list,而内置函数sorted()返回一个新的排序好的list,原list并不会被改变。
    • list.reverse(): 倒转该list中的元素。
    • list.copy(): 返回一个新的list。(Return a shallow copy of the list.) 等价于: a[:]
      • 示例:
        a = [1, 2, 3]
        b = [4, 5 6]
        c = a
        c.extend(b)  # 此时 c = [1, 2, 3, 4, 5, 6], a = [1, 2, 3, 4, 5, 6]
        
      • 如果上面 c = a 改为 c = a.copy() 或者 a[:], 则 c 和 a 是独立的2个变量。
  • 实例:
    >>> fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
    >>> fruits.count('apple')
    2
    >>> fruits.count('tangerine')
    0
    >>> fruits.index('banana')
    3
    >>> fruits.index('banana', 4)  # Find next banana starting a position 4
    6
    >>> fruits.reverse()
    >>> fruits
    ['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange']
    >>> fruits.append('grape')
    >>> fruits
    ['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape']
    >>> fruits.sort()
    >>> fruits
    ['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange', 'pear']
    >>> fruits.pop()
    'pear'
    
  • list可以在堆栈中使用:
    • list.apend(): 先进
    • list.pop(): 后出
  • list同样可在队列中使用,不过在list的最前面删除元素开销比较大。因为list是线性序列,在其最后面添加或删除元素特别快。我们可以利用collection模块中的deque函数来实现队列:
    from collection import deque
    queue = queue(listname)
    queue.apend("anotheritem")
    queue.popleft() # 先出
    

tuple

  • Sequence Type
  • tuplename = (1248,8421,”Hello”)
  • 元组是有序的,是不可变对象,其值初始化后不能更改。但是其可以包含可变对象,比如list,因为tuple保存的是list的name,list中元素变动,其name并不会改变。
  • tuple由许多由逗号分割开的值组成,一般用圆括号括起来。注意包含0个或一个元素的tuple,空tuple用圆括号括起来,只含一个元素的tuple在元素后面加一个逗号。
    • empty = ()
    • singleton = (“Hello”,)  一般用括号括起来。