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

列表

理解

  • 列表可以包含任何种类的对象:数字,字符串甚至其他列表。通过偏移存取。列表是可变对象,支持在原处修改的操作。在标准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 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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值