zoukankan      html  css  js  c++  java
  • python 中的“集合”(list、tuple、set、dict)

    在java中的集合在开发中用的最多的,也是我们最长用的数据结构了。那么python中的对应的是怎么样的呢

    一、List

    Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。

    1、定义list方式

    num_list = [1, 2, 3]
    num_list = range(10)

    注意:list的元素可以是不同类型的,例如:

    num_list = [1,'22',1.6]

    2、取值、添加、删除元素

    取值:使用下标索引(从0开始,同时支持从后往前取值)

    num_list = ['凯文-杜兰特', '克莱-汤普森', '斯蒂芬-库里']
    print(num_list[0])
    print(num_list[-1])
    print(num_list[-2])

    结果:

    凯文-杜兰特
    斯蒂芬-库里
    克莱-汤普森

    注意:(如果索引越界,则会报异常)

    Traceback (most recent call last):
      File "D:/intelljcode/mypython/mypython/colection.py", line 6, in <module>
        print(num_list[4])
    IndexError: list index out of range

    3、添加元素

    num_list = ['凯文-杜兰特', '克莱-汤普森', '斯蒂芬-库里']
    num_list.append("德拉蒙德-格林")
    num_list.insert(2, "安德烈-伊戈达拉")
    print(num_list)

    结果:['凯文-杜兰特', '克莱-汤普森', '安德烈-伊戈达拉', '斯蒂芬-库里', '德拉蒙德-格林']

    4、删除元素

    num_list = ['凯文-杜兰特', '克莱-汤普森', '斯蒂芬-库里']
    num_list.pop()
    num_list.remove('凯文-杜兰特')
    print(num_list)

     结果是:['克莱-汤普森', '安德烈-伊戈达拉', '斯蒂芬-库里']

    注意:(如果list为空使用pop()则会报异常,如果要删除的元素没有而使用remove('xxx')同样也会报异常,所以要操作前做为空和是否存在该元素判断)

    num_list = ['凯文-杜兰特', '克莱-汤普森', '斯蒂芬-库里']
    if'克莱-汤普森' in num_list:
        num_list.remove('克莱-汤普森')
    print(num_list)

    5、遍历元素

    遍历元素是特别常用的操作

    方式一:
    for
    player in num_list: print(player) 方式二: for i in range(len(num_list)): print(num_list[i])

     二、tuple

    另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。

    all_start = ('凯文-杜兰特', '克莱-汤普森', '斯蒂芬-库里')
    print(all_start[1])

    结果是:克莱-汤普森

    现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0]classmates[-1],但不能赋值成另外的元素。

    all_start = ('凯文-杜兰特', '克莱-汤普森', '斯蒂芬-库里')
    all_start[1] = 'KD'
    print(all_start)

    结果出异常:

    Traceback (most recent call last):
      File "D:/intelljcode/mypython/mypython/colection.py", line 38, in <module>
        all_start[1] = 'KD'
    TypeError: 'tuple' object does not support item assignment

    不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

    tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:但是一个元素的时候则需要加,区分括号的含义,如果没有括号则被解释器当做计算中的()。

    t = (1)
    print(t)

    结果为:1

    t = (1,)
    print(t)

    结果为(1,)

    注意:tuple元组中的元素不可变是:对于基本数据类型则是内容不可变,比如int、long等。对于引用指该引用不可变。

    比如:

    t = (1, 2, ['xwl', 'wl'])
    t[2][0] = 'yzq'
    print(t)

    结果为:(1, 2, ['yzq', 'wl'])

    三、dict

     Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度

    1、取值

    map = {'凯文-杜兰特': 30, '克莱-汤普森': 28, '斯蒂芬-库里': 40}
    print(map['凯文-杜兰特'])     //根据key取值
    print(map.get('凯文-杜兰特')) //根据key取值
    print(map.pop('凯文-杜兰特')) //pop节点
    print(map)
    print(map.items())//取所有的key-value
    print(map.keys()) //取所有的key
    print(map.values()) //取所有的value

    结果

    30
    30
    30
    {'斯蒂芬-库里': 40, '克莱-汤普森': 28}
    dict_items([('斯蒂芬-库里', 40), ('克莱-汤普森', 28)])
    dict_keys(['斯蒂芬-库里', '克莱-汤普森'])
    dict_values([40, 28])

    2、遍历

    map = {'凯文-杜兰特': 30, '克莱-汤普森': 28, '斯蒂芬-库里': 40}
    for key, value in map.items():
        print(key,value)

    结果:

    斯蒂芬-库里 40
    克莱-汤普森 28
    凯文-杜兰特 30

    如果key不存在,dict就会报错:

    d['Thomas']
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'Thomas'

    要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:

    'Thomas' in d
    False

    二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:

    d.get('Thomas')
    d.get('Thomas', -1)
    -1

    请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。

    和list比较,dict有以下几个特点:

    1. 查找和插入的速度极快,不会随着key的增加而变慢;
    2. 需要占用大量的内存,内存浪费多。

    而list相反:

    1. 查找和插入的时间随着元素的增加而增加;
    2. 占用空间小,浪费内存很少。

    所以,dict是用空间来换取时间的一种方法。

    dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象

    这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。

    要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key

    由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:

    d['Jack'] = 90
    d['Jack']
    90
    d['Jack'] = 88
    d['Jack']
    88

    三、Set

    set和dict类似,也是一组key的集合,但不存储value。由于key不能重复、无序的,所以,在set中,没有重复的key。(可以用来去重)

    要创建一个set,需要提供一个list作为输入集合:

    s = set([1,2,3])


    set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

    s = set([1, 2, 3])
    s1 = set([2, 3, 4, 5])
    print(s&s1)
    
    print(s|s1)

    结果是:

    {2, 3}
    {1, 2, 3, 4, 5}

  • 相关阅读:
    几个常见移动平台浏览器的User-Agent
    正则表达式那些事儿(三)
    正则表达式那些事儿(二)
    正则表达式那些事儿(一)
    jQuery官网plugins栏目下那些不错的插件
    UVA 11729 Commando War 突击战 【贪心】
    HDOJ 2084 数塔 【dp】
    HDOJ 1465 不容易系列之一 【错排公式 递推】
    HDOJ 2046 骨牌铺方格 【递推】
    HDOJ 2044 一只小蜜蜂... 【递推】
  • 原文地址:https://www.cnblogs.com/xwlmdd/p/python_list_tuple.html
Copyright © 2011-2022 走看看