python之 list、tuple、Dictionary 的用法和区别

来源:互联网 发布:u3d和java哪个更有发展 编辑:程序博客网 时间:2024/05/18 01:40

转自



http://hi.baidu.com/kxw102/item/c409d00eeeae58153b53ee06

List列表
  • 列表是序列对象,可包含任意的Python数据信息,如字符串、数字、列表、元组等。列表的数据是可变的,我们可通过对象方法对列表中的数据进行增加、修改、删除等操作。可以通过list(seq)函数把一个序列类型转换成一个列表。列表的几个例子:

    • list = [ "a", "b", "c" ],这是字符列表。

    • list = [ 1, 2, 3, 4 ],这是数字列表。

    • list = [ [1,2,3,4], ["a","b","c"] ],这是列表的列表。列表的嵌套

    • list = [ (1,2,3,4), ("a","b","c") ],这是元组列表。当然也可以在列表里面嵌套各种元素,比如:

      sample = [1, ["another", "list"], ("a", "tuple")]
    • list((1,2))把一个元组转换成一个列表[1,2],list('test')可把字符串转换成['t','e','s','t']列表。mylist=list(mytuple)就可以把一个tuple转换成list,然后tuple(mylist)可以把一个list转换成一个tuple

  • 访问列表可通过索引来引用(Slicing a list),如:list[0]将引用列表的第一个值。list[0:1]返回第一和第二个元素。这个不对,根据说明,只能返回0-(1-1),也就是说返回第0个元素。比如x=[1,2,3,4],那么x[1:2]就会得到2;x[1:3]就会得到2,3。这个是非常非常重要的地。

  • 如何能够让list里面的各个元素都运算:x=[1,2,3], 然后x=[3*xele for xele in x].这样写法是简单了,但是实际上还是写了一个for循环。
  • 用range()和xrange()函数可自动生成列表,具体用法请参考“python参考篇”的内容。

  • 可通过列表综合来创建列表,该功能是在python2.0版本中新增加的。如果想对列表中的每个项进行运算并把结果存储在一个新列表中,或者想创建一个仅包含特定满足某种条件的项,采用该方法是很适合的。如:[x*x for x in range(1,10)]会得到一个X的平方的新列表;我们还可添加if条件控制输出,如:[x*x for x in range(1,10) if x%2==0];还可在列表中使用多个for语句,如:

    >>> [x+y for x in "123" for y in "abc"]
    ['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']

    x,y值可取列表或元组等,以构成更复杂的结构。

  • “+”号可连接两个列表。

  • 访问列表的列表(嵌套列表)可用list[1][0],这将访问嵌套中的第二个列表的第一个元素。

  • 可用数字与列表相乘以复制内容,如:list*2会得到一个[1,2,3,4,1,2,3,4]的列表。注意,不能用列表与列表相乘。

  • 由于列表是可变的,我们可用赋值语句进行操作,如:list[0] = 2。

  • 列表对象方法可对列表进行操作,如列表内容的添加,删除,排序等。如list.sort()可对list列表进行排序。

  • 例子1:在这里写一个很好的例子,用来查询list里面的某个元素的Index
    # Search the value in L list   
    def research(L, value, start=0):
    i = start - 1
    try:
    while 1:
    i = L.index(value, i+1)
    return i
    except ValueError:
    pass
  • 在上面例子中我们也可以写成   >>>"c" in li 如果存在则返回1,如果不存在就返回0,这样可以查询是否包括某个元素。
    >>> li.index("new") 这个命令可以返回那个元素所在index,如果不存在就会报错,所以最好使用上面例子的方法
  • 例子2:再写一个例子:
    >>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
    >>> [weapon.strip() for weapon in freshfruit]
    ['banana', 'loganberry', 'passion fruit']
    >>> vec = [2, 4, 6]
    >>> [3*x for x in vec]
    [6, 12, 18]
    >>> [3*x for x in vec if x > 3]
    [12, 18]
    >>> [3*x for x in vec if x < 2]
    []
    >>> [[x,x**2] for x in vec]
    [[2, 4], [4, 16], [6, 36]]
    >>> [x, x**2 for x in vec] #error - parens required for tuples
    File "<stdin>", line 1, in ?
    [x, x**2 for x in vec]
    ^
    SyntaxError: invalid syntax
    >>> [(x, x**2) for x in vec]
    [(2, 4), (4, 16), (6, 36)]
    >>> vec1 = [2, 4, 6]
    >>> vec2 = [4, 3, -9]
    >>> [x*y for x in vec1 for y in vec2]
    [8, 6, -18, 16, 12, -36, 24, 18, -54]
    >>> [x+y for x in vec1 for y in vec2]
    [6, 5, -7, 8, 7, -5, 10, 9, -3]
    >>> [vec1[i]*vec2[i] for i in range(len(vec1))]
    [8, 12, -54]
  • 例子3
    >>> li

    ['a', 'b', 'mpilgrim', 'z', 'example']
    >>> li[:3]
    ['a', 'b', 'mpilgrim']
    >>> li[3:]
    ['z', 'example']
    >>> li[:]#这个表示全部引用
    ['a', 'b', 'mpilgrim', 'z', 'example']

  • 列表对象支持的方法

    方法 描述 append(x) 在列表尾部追加单个对象x。使用多个参数会引起异常。 count(x) 返回对象x在列表中出现的次数。 extend(L) 将列表L中的表项添加到列表中。返回None。 Index(x) 返回列表中匹配对象x的第一个列表项的索引。无匹配元素时产生异常。 insert(i,x) 在索引为i的元素前插入对象x。如list.insert(0,x)在第一项前插入对象。返回None。 pop(x) 删除列表中索引为x的表项,并返回该表项的值。若未指定索引,pop返回列表最后一项。 remove(x) 删除列表中匹配对象x的第一个元素。匹配元素时产生异常。返回None。 reverse() 颠倒列表元素的顺序。 sort() 对列表排序,返回none。bisect模块可用于排序列表项的添加和删除。

Tuple元组

Tuple(元组)和List(列表)很相似,但元组是不可变的。不能对元组中的元素进行添加,修改和删除操作。如果需修改元组内容只有重建元组。元组用小括号来表示。如tuple=(1,2,3)。

  • tuple=(1,),这是单个元素的元组表示,需加额外的逗号。

  • tuple=1,2,3,4,这也可以是一个元组,在不使用圆括号而不会导致混淆时,Python允许不使用圆括号的元组。

  • 和列表一样,可对元组进行索引、分片、连接和重复。也可用len()求元组长度。

    元组的索引用tuple[i]的形式,而不是tuple(i)。
  • 和列表类似,使用tuple(seq)可把其它序列类型转换成元组。

    Dictionary字典

    字典是一个用大括号括起来的键值对,字典元素分为两部份,键(key)和值。字典是python中唯一内置映射数据类型。通过指定的键从字典访问值。如:

    monthdays = { "Jan":31, "Feb":28, "Mar":31, "Apr":30, "May":31, "Jun":30, "Jul":31, "Aug":31, "Sep":30, "Oct":31, "Nov":30,"Dec":31 }
    • 字典可嵌套,可以在一个字典里包含另一个字典。如test={"test":{"mytest":10} }

    • 可用键访问字典,如monthdays["Jan"],可访问值31。如果没有找到指定的键,则解释器会引起异常。

    • 字典是可修改,如monthdays["Jan"]=30,可把Jan的值由31改为30。如monthdays["test"]=30可添加一个新键值对。

    • del monthdays["test"]可删除字典条目。

    • 字典不属序列对象,所以不能进行连接和相乘操作。字典是没有顺序的。

    • 字典提供keys和values方法,用来返回字典中定义的所有键和值。

    • 和列表一样,字典也提供了对象方法来对字典进行操作。

      字典方法

      方法 描述 has_key(x) 如果字典中有键x,则返回真。 keys() 返回字典中键的列表 values() 返回字典中值的列表。 items() 返回tuples的列表。每个tuple由字典的键和相应值组成。 clear() 删除字典的所有条目。 copy() 返回字典高层结构的一个拷贝,但不复制嵌入结构,而只复制对那些结构的引用。 update(x) 用字典x中的键值对更新字典内容。 get(x[,y]) 返回键x,若未找到该键返回none,若提供y,则未找到x时返回y。
0 0
原创粉丝点击