列表
理解
- 列表可以包含任何种类的对象:数字,字符串甚至其他列表。通过偏移存取。列表是可变对象,支持在原处修改的操作。在标准Python解释器内部,列表就是C数组而不是链接结构。
- 在列表中使用嵌套列表时,有事需要将几次索引操作连在一起使用来深入到数据结构中去。最简单的方法之一是将其表示为矩阵(二维数组),在Python中相当于嵌套了子列表的列表。
索引与切片的赋值
- 索引和分片都是在原地修改,而不是生成新的列表作为结果。在分片赋值中,最好分成两步来理解:
1.删除。删除等号左边指定的分片。
2.插入。将包含在等号右边对象中的对象中的片段插入旧分片被删除的位置。
实际情况并非如此,但有助于理解为什么插入元素的数目不需要与删除的数目相匹配。因此分片赋值能够用来替换(覆盖)、增长(插入)、缩短(删除)主列表。但通常还有更简单直接的方式实现替换、插入以及删除。(例如合并、insert、pop、remove、等方法)
列表方法
append
,能够简单的将一个单项价值列表末端。与合并不同的是,append允许传入单一对象而不是列表。L.append(x)
与L+[x]
的结果类似,不同的是,前者回原地修改L,而后者会生成的列表。sort
,原地对列表进行排序,默认以递增的顺序进行排序。reverse
参数允许排序按照降序而不是升序进行。>>>L = ['abc', 'ABD', 'aBe'] >>>L.sort() # Sort with mixed case >>>L ['ABD', 'aBe', 'abc'] >>>L = ['abc', 'ABD', 'aBe'] >>> L.sort(key=str.lower) # Normalize to lowercase >>> L ['abc', 'ABD', 'aBe'] >>> >>> L = ['abc', 'ABD', 'aBe'] >>> L.sort(key=str.lower, reverse=True) # Change sort order >>> L ['aBe', 'ABD', 'abc']
append
和sort
原处修改相关的列表对象,而结果并没有返回列表。(从技术上讲,两者值皆为None)。一部分原因是这样的限制,排序也在最近的Python中可以作为内置函数使用了,它可以排序任何集合,并且针对结果返回一个新的列表(而不是原处修改):>>>L = ['abc', 'ABD', 'aBe'] >>>sorted(L, key=str.lower, reverse=True) # Sorting built-in ['aBe', 'ABD', 'abc'] >>>L = ['abc', 'ABD', 'aBe'] >>>sorted([x.lower() for x in L], reverse=True) # Pretransform items: differs! ['abe', 'abd', 'abc']
del语句删除,可以在原处删除某项或某片段:
>>>L ['spam','eat','more','please'] >>>del L[0] ['eat','more','please'] >>>del L[1:] >>>L ['eat'] #也可以通过将空列表赋值给分片来删除列表片段 >>>L=['already','got','one'] >>>L[1:]=[] #会删除左边的分片,然后什么也不插入。 >>>L ['already'] >>>L[0]=[] #另一方面,将空列表赋值给一个索引只会在指定的位置存储空列表的引用,而不是删除 >>>L [[]]
字典
理解
字典与列表的区别:如果把列表看作是有序的对象集合,那么就可以把字典看作无序的集合。字典当中的元素是通过键来存取的,而不是通过偏移存取,固定从左到右的顺序操作(例如分片和合并)不适用于字典,设计目的是为了执行键查找(散列查找)。
>>>D={'spam': 2 , 'ham': 1, 'eggs': 3} >>>'ham' in D True >>>list(D.keys()) ['eggs','ham','spam']
它能够检查某个键是否存储在字典中,从技术上来讲,是因为字典定义了单步遍历keys列表的迭代器。
其他字典方法
values和items分别返回字典的值列表和(key,value)对元组(和keys意一样,将它们放入在一个list调用中,来收集它们的值以显示)。读取不存在的键时会报错,然而键不存在时,通过get方法能够返回默认值。这是在当键不存在时为了避免missing-key错误而填入默认值的一个简单方法。
#避免missing-key至少有三种方式 #get方法 >>>D.get('spam') 2 >>>print(D.get('toast')) None >>>D.get('toast',88) 88 #if语句 if('spam') in D: print(D['spam']) else: print(0) #try语句 try: print(D['spam']) except KeyError: print(0)
- pop,可以从字典中通过删除一个键并删除它的值,不同于列表删除一个可选位置。
- 注意事项:
1.序列运算无效:没有顺序的概念,有序合并和分片的运算不能用
2.对新索引赋值会添加项:当编写字典常量时或者向现有字典对象的新键赋值时,都会生成键。最终的结果是一样的。
3.键不一定总是字符串。 组建字典的四种方法:
{'name':'mel' , 'age': 45} #1 D = {} #2 D['name'] ='mel' D['age']=45 dict(name='mel',age=45) #3 dict([('name','mel'),('age',45)]) #4 dict.fromkeys(['a','b'],0) #5适用于所有键的值都相同 {k:0 for k in 'ab'} #6使用字典解析
- 在pyhton 3.0 中不再用has__key方法,而以in取代。
摘自< Learning Python.4th>