1. More on List

    a) Functional Programming Tools

    filter(function, sequence):  returns a sequence consisting of those items from the sequence for which function(item) is true.

    如果sequence是string或tuple,则filter返回string或tuple;否则返回list

 

 

Python 笔记(3) -- More on Data Structures>>> def f(x): return x % 2 != 0 and x % 3 != 0
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structures
>>> filter(f, range(225))
Python 笔记(3) -- More on Data Structures[
571113171923]

 

     map(function, sequence): calls function(item) for each of the sequence's items and returns a list of the return values. 

 

Python 笔记(3) -- More on Data Structures>>> def cube(x): return x*x*x
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structures
>>> map(cube, range(111))
Python 笔记(3) -- More on Data Structures[
1827641252163435127291000]

 

     可以传多个sequence。但如果sequences长度不同,则短sequence对应于长sequence的items被视为None. => 如果做与None不符的操作会产生错误.

 

Python 笔记(3) -- More on Data Structures>>> seq = range(8)
Python 笔记(3) -- More on Data Structures
>>> def add(x, y): return x+y
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structures
>>> map(add, seq, seq)
Python 笔记(3) -- More on Data Structures[0, 
2468101214]

 

     reduce(function, sequence): returns a single value constructed by calling the binary function function on the first two items of the sequence, then on the result and the next item, and so on.

 

Python 笔记(3) -- More on Data Structures>>> def add(x,y): return x+y
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structures
>>> reduce(add, range(111))
Python 笔记(3) -- More on Data Structures
55
Python 笔记(3) -- More on Data Structures

 

     b) List Comprehensions

     一种比map(), filter() and/or lambda 更为“精妙”的产生List的方法。

          List Comprehension: [expression for ... [for ...][ if...]]. [for ...][ if...]] means 0 or more

     如果expression是一个tuple,则必须括起来

 

Python 笔记(3) -- More on Data Structures>>> vec = [246]
Python 笔记(3) -- More on Data Structures
>>> [3*for x in vec if x > 3]
Python 笔记(3) -- More on Data Structures[
1218]
Python 笔记(3) -- More on Data Structures
>>> [[x,x**2for x in vec] #expression is tuple
Python 笔记(3) -- More on Data Structures
[[24], [416], [636]]
Python 笔记(3) -- More on Data Structures
>>> [(x, x**2for x in vec]
Python 笔记(3) -- More on Data Structures[(
24), (416), (636)]
Python 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structures
# operate on two lists
Python 笔记(3) -- More on Data Structures
>>> vec1 = [246]
Python 笔记(3) -- More on Data Structures
>>> vec2 = [43-9]
Python 笔记(3) -- More on Data Structures
>>> [x+for x in vec1 for y in vec2]
Python 笔记(3) -- More on Data Structures[
65-787-5109-3]
Python 笔记(3) -- More on Data Structures
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
Python 笔记(3) -- More on Data Structures[
812-54]

 

2.  del statement

     通过a) index,b) slices 删除list中的元素。也可删除变量

 

3. Tuple

     A tuple consists of a number of values separated by commas.

     Tuple允许嵌套,单个tuple输入时无需加括号,但如果作为一个元素用在其他表达式中,则需要加括号。

     与string一样,tuple中的元素值也是不可更改的,但tuple可以包含mutable的对象,如list.

 

Python 笔记(3) -- More on Data Structures>>> empty = ()
Python 笔记(3) -- More on Data Structures
>>> singleton = 'hello',    # <-- note trailing comma
Python 笔记(3) -- More on Data Structures
>>> len(empty)
Python 笔记(3) -- More on Data Structures0
Python 笔记(3) -- More on Data Structures
>>> len(singleton)
Python 笔记(3) -- More on Data Structures
1
Python 笔记(3) -- More on Data Structures
>>> singleton
Python 笔记(3) -- More on Data Structures(
'hello',)
Python 笔记(3) -- More on Data Structures

 

     tuple packing: such as t = 12345, 54321, 'hello!', the values 12345, 54321 and 'hello!' are packed together in a tuple.

   sequence unpacking: such as x, y, z = t. 左边变量列表中的元素个数必须与右边的tuple中元素个数相同

   multiple assignment是tuple packing和sequence unpacking的组合

 

4. Sets

     元素不允许重复的无序集合。支持并集,交集,差集和对称差集(symmetric difference)等集合操作

 

Python 笔记(3) -- More on Data Structures>>> basket = ['apple''orange''apple''pear''orange''banana']
Python 笔记(3) -- More on Data Structures
>>> fruit = set(basket)               # create a set without duplicates
Python 笔记(3) -- More on Data Structures
>>> fruit
Python 笔记(3) -- More on Data Structuresset([
'orange''pear''apple''banana'])
Python 笔记(3) -- More on Data Structures
>>> 'orange' in fruit                 # fast membership testing
Python 笔记(3) -- More on Data Structures
True
Python 笔记(3) -- More on Data Structures
>>> 'crabgrass' in fruit
Python 笔记(3) -- More on Data StructuresFalse
Python 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structures
>>> # Demonstrate set operations on unique letters from two words
Python 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structures
>>> a = set('abracadabra')
Python 笔记(3) -- More on Data Structures
>>> b = set('alacazam')
Python 笔记(3) -- More on Data Structures
>>> a                                  # unique letters in a
Python 笔记(3) -- More on Data Structures
set(['a''r''b''c''d'])
Python 笔记(3) -- More on Data Structures
>>> a - b                              # letters in a but not in b
Python 笔记(3) -- More on Data Structures
set(['r''d''b'])
Python 笔记(3) -- More on Data Structures
>>> a | b                              # letters in either a or b
Python 笔记(3) -- More on Data Structures
set(['a''c''r''d''b''m''z''l'])
Python 笔记(3) -- More on Data Structures
>>> a & b                              # letters in both a and b
Python 笔记(3) -- More on Data Structures
set(['a''c'])
Python 笔记(3) -- More on Data Structures
>>> a ^ b                              # letters in a or b but not both
Python 笔记(3) -- More on Data Structures
set(['r''d''b''m''z''l'])
Python 笔记(3) -- More on Data Structures

 

5. Dictionaries

     dictionary = {key:value, key:value,...}

     dictionaries中,key可以为string,number,tuple(tuple中不能包含mutable的对象,如list)。key是唯一的,当对其中一个key对应的元素赋值时,之前保存的值会被冲掉。用del可以删除dict中的key:value元素,如del dict["key1"]

     key()返回包含所有key的list,无序。

     has_key() or in 查看某个key是否包含在dict中

    dict() 从key-value以tuple方式存储的list中构建dictionary

 

Python 笔记(3) -- More on Data Structures>>> dict([('sape'4139), ('guido'4127), ('jack'4098)])
Python 笔记(3) -- More on Data Structures{
'sape'4139'jack'4098'guido'4127}
Python 笔记(3) -- More on Data Structures
>>> dict([(x, x**2for x in (246)])     # use a list comprehension
Python 笔记(3) -- More on Data Structures
{24416636}
Python 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structures
>>> dict(sape=4139, guido=4127, jack=4098)
Python 笔记(3) -- More on Data Structures{
'sape'4139'jack'4098'guido'4127}

 

6. Looping Techniques

     a) dictionaries

          用 iteritems() 同时获得key和value

     b) one sequence

          用 enumerate() 同时获得index和value 

     c) two or more sequences

          zip(seq1, seq2...)

     d) a sequence in reversed

          reversed(seq)

     e) a sequence in sorted

          sorted(seq): 生成一个新的有序的sequence

 

Python 笔记(3) -- More on Data Structures#dictionary
Python 笔记(3) -- More on Data Structures
>>> knights = {'gallahad''the pure''robin''the brave'}
Python 笔记(3) -- More on Data Structures
>>> for k, v in knights.iteritems():
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures     
print k, v
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structuresgallahad the pure
Python 笔记(3) -- More on Data Structuresrobin the brave
Python 笔记(3) -- More on Data Structures
# a sequence
Python 笔记(3) -- More on Data Structures
>>> for i, v in enumerate(['tic''tac''toe']):
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures     
print i, v
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structures0 tic
Python 笔记(3) -- More on Data Structures
1 tac
Python 笔记(3) -- More on Data Structures
2 toe
Python 笔记(3) -- More on Data Structures
# two or more sequences
Python 笔记(3) -- More on Data Structures
>>> questions = ['name''quest''favorite color']
Python 笔记(3) -- More on Data Structures
>>> answers = ['lancelot''the holy grail''blue']
Python 笔记(3) -- More on Data Structures
>>> for q, a in zip(questions, answers):
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures     
print 'What is your %s?  It is %s.' % (q, a)
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures    
Python 笔记(3) -- More on Data StructuresWhat 
is your name?  It is lancelot.
Python 笔记(3) -- More on Data StructuresWhat 
is your quest?  It is the holy grail.
Python 笔记(3) -- More on Data Structures
# a sequence in reversed order
Python 笔记(3) -- More on Data Structures
>>> for i in reversed(xrange(1,10,2)):
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures     
print i
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures
Python 笔记(3) -- More on Data Structures
9
Python 笔记(3) -- More on Data Structures
7
Python 笔记(3) -- More on Data Structures
5
Python 笔记(3) -- More on Data Structures
3
Python 笔记(3) -- More on Data Structures
1
Python 笔记(3) -- More on Data Structures
# a sequence in sorted order
Python 笔记(3) -- More on Data Structures
>>> basket = ['apple''orange''apple''pear''orange''banana']
Python 笔记(3) -- More on Data Structures
>>> for f in sorted(set(basket)):
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures     
print f
Python 笔记(3) -- More on Data StructuresPython 笔记(3) -- More on Data Structures     
Python 笔记(3) -- More on Data Structuresapple
Python 笔记(3) -- More on Data Structuresbanana
Python 笔记(3) -- More on Data Structuresorange
Python 笔记(3) -- More on Data Structurespear
Python 笔记(3) -- More on Data Structures

相关文章: