The Python Tutorial - Data Structures

来源:互联网 发布:数组.length 编辑:程序博客网 时间:2024/05/18 04:09

5.Data Structures

关于列表更多的内容

>>> a = [66.25, 333, 333, 1, 1234.5]>>> print(a.count(333), a.count(66.25), a.count('x'))2 1 0>>> a.insert(2, -1)>>> a.append(333)>>> a[66.25, 333, -1, 333, 1, 1234.5, 333]>>> a.index(333)1>>> a.remove(333)>>> a[66.25, -1, 333, 1, 1234.5, 333]>>> a.reverse()>>> a[333, 1234.5, 1, 333, -1, 66.25]>>> a.sort()>>> a[-1, 1, 66.25, 333, 333, 1234.5]>>> a.pop()1234.5>>> a[-1, 1, 66.25, 333, 333]

List Comprehensions (列表推导式)

>>> squares =[]>>> for x in range(10):...     squares.append(x**2)>>> squares[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]=> squares = list(map(lambda x: x**2, range(10)))=>squares = [x**2 for x in range(10)]
>>> [(x,y) for x in [1,2,3] for y in [3,1,4] if x != y][(1,3), (1,4), (2,3), (2,1), (2,4), (3,1), (3,4)]>>> # equivalent to:>>> combs = []>>> for x in [1, 2, 3]:...     for y in [3, 1, 4]:...         if x != y:...             combs.append((x, y))>>> combs
>>> vec = [-4, -2, 0, 2, 4]>>> # create a new list with the values doubled>>> [x*2 for x in vec][-8, -4, 0, 4, 8]>>> # filter the list to exclude negative numbers>>> [x for x in vec if x >= 0][0, 2, 4]>>> # apply a function to all the elements>>> [abs(x) for x in vec][4, 2, 0, 2, 4]>>> # call a method on each element>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']>>> [weapon.strip() for weapon in freshfruit]['banana', 'loganberry', 'passion fruit']>>> # create a list of 2-tuples like (number, square)>>> [(x, x**2) for x in range(6)][(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]>>> # the tuple must be parenthesized, otherwise an error is raised>>> [x, x**2 for x in range(6)]  File "<stdin>", line 1, in ?    [x, x**2 for x in range(6)]               ^SyntaxError: invalid syntax>>> # flatten a list using a listcomp with two 'for'>>> vec = [[1,2,3], [4,5,6], [7,8,9]]>>> [num for elem in vec for num in elem][1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> # 列表推导式可使用复杂的表达式和嵌套函数:>>> from math import pi>>> [str(round(pi, i)) for i in range(1, 6)]['3.1', '3.14', '3.142', '3.1416', '3.14159'] 
>>> # 嵌套的列表推导式>>> matrix = [...     [1, 2, 3, 4],...     [5, 6, 7, 8],...     [9, 10, 11, 12],... ]>>> [[row[i] for row in matrix] for i in range(4)][[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]>>> # equivalent to:>>> list(zip(*matrix))[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

del 语句

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]>>> del a[0]>>> a[1, 66.25, 333, 333, 1234.5]>>> del a[2:4]>>> a[1, 66.25, 1234.5]>>> del a[:]>>> a[]>>> # del 也可以删除整个变量>>> del a

Set 集合

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}>>> print(basket)                      # show that duplicates have been removed{'orange', 'banana', 'pear', 'apple'}>>> 'orange' in basket                 # fast membership testingTrue>>> 'crabgrass' in basketFalse>>> # Demonstrate set operations on unique letters from two words...>>> a = set('abracadabra')>>> b = set('alacazam')>>> a                      # unique letters in a{'a', 'r', 'b', 'c', 'd'}>>> a - b                  # letters in a but not in b{'r', 'd', 'b'}>>> a | b                  # letters in either a or b{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}>>> a & b                  # letters in both a and b{'a', 'c'}>>> a ^ b            # letters in a or b but not both{'r', 'd', 'b', 'm', 'z', 'l'}>>> #类似 for lists ,这里有一种集合推导式语法>>> a = {x for x in 'abracadabra' if x not in 'abc'}>>> a{'r', 'd'}

Dictionaries 字典

>>> tel = {'jack': 4098, 'sape': 4139}>>> tel['guido'] = 4127>>> tel{'sape': 4139, 'guido': 4127, 'jack': 4098}>>> tel['jack']4098>>> del tel['sape']>>> tel['irv'] = 4127>>> tel{'guido': 4127, 'irv': 4127, 'jack': 4098}>>> list(tel.keys())['irv', 'guido', 'jack']>>> sorted(tel.keys())['guido', 'irv', 'jack']>>> 'guido' in telTrue>>> 'jack' not in telFalse
>>> # dict() 构造函数可以直接从 key-value 对中创建字典:>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]){'sape': 4139, 'jack': 4098, 'guido': 4127}
>>> # 字典推导式可以从任意的键值表达式中创建字典:>>> {x: x**2 for x in (2, 4, 6)}{2: 4, 4: 16, 6: 36}>>> # 如果关键字都是简单的字符串,有时通过关键字参数指定 key-value 对更为方便:>>> dict(sape=4139, guido=4127, jack=4098){'sape': 4139, 'jack': 4098, 'guido': 4127}

Looping Techniques 循环技巧

>>> # 在字典中循环时,关键字和对应的值可以使用 iteritems() 方法同时解读出来>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}>>> for k, v in knights.items():...     print(k, v)...gallahad the purerobin the brave>>> # 在序列中循环时,索引位置和对应值可以使用 enumerate() 函数同时得到>>> for i, v in enumerate(['tic', 'tac', 'toe']):...     print(i, v)...0 tic1 tac2 toe>>> # 同时循环两个或更多的序列,可以使用 zip() 整体打包>>> questions = ['name', 'quest', 'favorite color']>>> answers = ['lancelot', 'the holy grail', 'blue']>>> for q, a in zip(questions, answers):...     print('What is your {0}?  It is {1}.'.format(q, a))...What is your name?  It is lancelot.What is your quest?  It is the holy grail.What is your favorite color?  It is blue.>>> # 需要逆向循环序列的话,先正向定位序列,然后调用 reversed() 函数>>> for i in reversed(range(1, 10, 2)):...     print(i)...97531>>> # 要按排序后的顺序循环序列的话,使用 sorted() 函数,它不改动原序列,而是生成一个新的已排序的序列>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']>>> for f in sorted(set(basket)):...     print(f)...applebananaorangepear

More on Conditions 深入条件控制

>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'>>> non_null = string1 or string2 or string3>>> non_null'Trondheim'

Comparing Sequences and Other Types 比较序列和其它类型

(1, 2, 3)              < (1, 2, 4)[1, 2, 3]              < [1, 2, 4]'ABC' < 'C' < 'Pascal' < 'Python'(1, 2, 3, 4)           < (1, 2, 4)(1, 2)                 < (1, 2, -1)(1, 2, 3)             == (1.0, 2.0, 3.0)(1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)
0 0
原创粉丝点击