关于列表和字典的使用注意

来源:互联网 发布:如何看待韩国 知乎 编辑:程序博客网 时间:2024/06/06 07:11

列表

理解

  • 列表可以包含任何种类的对象:数字,字符串甚至其他列表。通过偏移存取。列表是可变对象,支持在原处修改的操作。在标准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'] 
  • appendsort原处修改相关的列表对象,而结果并没有返回列表。(从技术上讲,两者值皆为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 DTrue>>>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} #1D = {}  #2D['name'] ='mel'D['age']=45dict(name='mel',age=45) #3dict([('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>

0 0
原创粉丝点击