zoukankan      html  css  js  c++  java
  • python数据类型-----列表

    今天来总结下python3.4版本列表的一些操作方法。

    列表(list):  

      1、列表就像一个线性容器,但是比C++的 lis t扩展多得多,列表里的元素可以是相同类型,也可以包含各种类型,比如列表里嵌套另一个列表

      2、list的索引是也是从0开始,但也可以从后访问,L1[-1] 表示L1中的最后一个元素对列表可以进行切片

      3、列表可以做加法,做乘法,字符串也可以看做一个字符的列表

      4、in语句,判断一个对象是否在一个字符串/列表/元组里
      5、not 语句表示对后面的否定
      6、len 可以检测字符串/列表/元祖/字典的元素个数
      7、max 可以返回最大元素,min 返回最小元素

      8、len(List)返回List的长度
      del list[i]删除列表list中指定的第i+1个变量
      9、切片:切片指的是抽取序列的一部分,其形式为:list[start:end:step]。其抽取的规则是:一般默认的步长为1,但也可自定义。 切片的操作类似于对函数的调用,返回值一个新的列表,

      切片 L1[ x : y : z ] 是半开闭区间(z通常不用写),如L1[1:3] 返回的是一个从 L1[1] 开始到 L1[2] 结束的列表,不包含L1[3],x 不写表示从头开始,y 不写表示直到列表结束,

      z 用于表示步长, 默认是1, 可以认为是在这个区间里每 z 个元素取一个(取第一个),可以是负数,表示从后到前遍历 

     

    list 的方法:

    1、append(x)追加到链尾
    2、clear()清空列表元素
    3、copy()列表的浅拷贝
    4、extend(L)追加一个列表,等价于+=
    5、insert(i,x)在位置i插入x,其余元素向后推,如果i大于列表长度,就在最后添加,如果i小于0,就在最开始添加
    6、remove(x)删除第一个值为x的元素,如果不存在会抛出异常
    7、reverse()反转序列
    8、pop([i])删除位置 i 的元素并将它返回,默认可以不写 i ,删除最后一个元素,不存在会出错素。pop 会做两件事:删除 list 的最后一个元素,然后返回删除元素的值。
    9、index(x)返回x在列表中第一次出现的位置,不存在则抛出异常
    10、count(x)返回x出现的次数
    11、sort(key=None, reverse=False) 将原列表排序,返回None,有两个可选参数,key 和 reverse,默认为升序排列

    >>> L1 = [1,2,3,4,5,6]
    >>> L1[1:3]
    [2, 3]
    >>> L1[:3]
    [1, 2, 3]
    >>> L1[1:]
    [2, 3, 4, 5, 6]
    >>> L1[-3:-1]
    [4, 5]
    >>> L2 = L1[:]
    >>> L2
    [1, 2, 3, 4, 5, 6]
    >>> L1[::2]
    [1, 3, 5]
    >>> L1[::-1]
    [6, 5, 4, 3, 2, 1]

    >>> L1 = [1,2]
    >>> L2 = [3,4]
    >>> L1 + L2
    [1, 2, 3, 4]
    >>> 5 * L1
    [1, 2, 1, 2, 1, 2, 1, 2, 1, 2]

    >>> L1
    [1, 2, 3, 4, 2]
    >>> 3 in L1
    True
    >>> 5 in L1
    False
    >>> 3 not in L1
    False
    >>> 5 not in L1
    True
    >>> len(L1)
    5
    >>> max(L1)
    4
    >>> min(L1)
    1

    >>> #赋值
    >>> L1[1] = 5
    >>> L1
    [1, 5, 3, 4, 2]
    >>> #删除
    >>> del L1[1]
    >>> L1
    [1, 3, 4, 2]
    >>> #分片赋值
    >>> L1[2:] = [6,7,8]
    >>> L1
    [1, 3, 6, 7, 8]
    >>> L1[1:3] = []
    >>> L1
    [1, 7, 8]

    >>> L1
    [8, 7, 2, 1]
    >>> L1.sort()
    >>> L1
    [1, 2, 7, 8]
    >>> L1.sort(reverse = True)
    >>> L1
    [8, 7, 2, 1]
    >>> L1 = ['a','ccc','abcd','bc','cd','abc']
    >>> L1.sort(key = len)
    >>> L1
    ['a', 'bc', 'cd', 'ccc', 'abc', 'abcd']

    python中对list去重的多种方法
      今天遇到一个问题,在同事随意的提示下,用了 itertools.groupby 这个函数。不过这个东西最终还是没用上。

      问题就是对一个list中的id进行去重,去重之后要保证顺序不变。

    1、直观方法
      最简单的思路就是:
      >>>ids = [1,2,3,3,4,2,3,4,5,6,1]
      >>>news_ids = []
      >>>for id in ids:
          if id not in news_ids:
              news_ids.append(id)
      >>>print news_ids
      这样也可行,但是看起来不够爽。

    2、用set
      另外一个解决方案就是用set和sort:

      >>>ids = [1,4,3,3,4,2,3,4,5,6,1]
      >>>news_ids = list(set(ids))
      >>>news_ids.sort(key=ids.index)

      >>>new_ids

      [1, 4, 3, 2, 5, 6]

    3、使用itertools.grouby
      文章一开始就提到itertools.grouby, 如果不考虑列表顺序的话可用这个:
      >>>ids = [1,4,3,3,4,2,3,4,5,6,1]
      >>>ids.sort()
      >>>it = itertools.groupby(ids)
      >>>for k, g in it:
          print k
      关于itertools.groupby的原理可以看这里:http://docs.python.org/2/library/itertools.html#itertools.groupby

    4、用reduce
      >>>ids = [1,4,3,3,4,2,3,4,5,6,1]
      >>>func = lambda x,y:x if y in x else x + [y]
      >>>reduce(func, [[], ] + ids)
      [1, 4, 3, 2, 5, 6]
      其中的 lambda x,y:x if y in x else x + [y] 等价于 lambda x,y: y in x and x or x+[y]
      思路其实就是先把ids变为[[], 1,4,3,......] ,然后在利用reduce的特性。

  • 相关阅读:
    acdream 1017: Fast Transportation 网络流层次图
    centos5的kernel source
    Linux内核源代码的阅读及相关工具介绍(转)
    gcc生成静态库和动态库(转)
    写一篇大家一看就会的教程《JNI初步》(转)
    jni.h
    5分钟学用Lucene
    (VC2005) picture 控件显示16*16的Icon
    (VC/MFC)通过结构体传递参数给线程
    (VC2005)MFC中添加控件的成员变量.
  • 原文地址:https://www.cnblogs.com/MrFiona/p/5958860.html
Copyright © 2011-2022 走看看