zoukankan      html  css  js  c++  java
  • python 列表 元组 字典 集合

     

     

    列表

    lst = [i for i in range(10)]

    切片

    # 把下标小于2的显示出来
    print(lst[:2])
    # 把10个数有大到小输出
    print(lst[::-1])
    # 把下标为奇数的数字显示出来
    print(lst[::2])

    显示结果

    [0, 1]
    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    [0, 2, 4, 6, 8]

    当切片时,会生成新的内存来存储切之后的列表。

    l1 = lst
    l2 = lst[::]
    print(id(lst))  # 2601618176520
    print(id(l1))  # 2601618176520
    print(id(l2))  # 2601618469128

    列表生成器  —— 一个使你代码牛逼的利器

    # 显示能被2整除的数字
    l3 = [i for i in lst if i % 2 == 0]  # 注意第一个i、第二个i和第3个i要相对应

    嵌套列表

    # 嵌套列表
    lst = [1, [2, 3]]
    for i in lst:
        print(i)
    # 显示结果
    # 1
    # [2, 3]
    for i in range(1, 4):
        for j in range(5, 7):
            print(i + j, end="  ")
        print()

    显示结果

    6 7
    7 8
    8 9

    append追加

    a = [2, 3, 5]
    a.append(100)
    print(a)

    [2, 3, 5, 100]

    a.pop()
    print(a)

    [2, 3, 5]

    b = [2, 4]
    a.extend(b)
    print(a)

    [2, 3, 5, 2, 4]

    浅拷贝

    列表在存储嵌套列表时,l1 = [1, [2, 5, 6], 9]

    [2, 5, 6]在l1的存储形式为[2, 5, 6]的指针

    在浅拷贝时,拷贝的只是列表的连接

    拷贝之后会形成新的地址

    lst2 = lst.copy()
    print(id(lst))
    print(id(lst2))
    #2677879858952
    #2677879858632
    lst2[0] = 10
    print(lst)
    print(lst2)

    [1, [2, 5, 6], 9]
    [10, [2, 5, 6], 9]

    可以看到,lst2的第一个元素变成了10,而lst却没有改变

    lst2[1][0] = 100
    
    print(lst)
    print(lst2)

    [1, [100, 5, 6], 9]
    [10, [100, 5, 6], 9]

    而此时lst2的第二个元素的第一个元素会变,但lst的元素也变了。

    元组

    tuple, 我个人认为元组就是一个简化了的列表,也许tuple有自己的功能,但我还是觉得,元组是为了节省空间而存在的。

    创建一个空元组 

    t1 = ()
    print(type(t1))

    成员检测

    t2 = (1, 2, 3)
    print(1 in t2)
    print(4 in t2)

    但我为啥会说是简化的列表呢?

    tuple与list的不同

    list可以增删改

    而tuple不可以,tuple

    t2 = (1, 2, 3)
    t2.pop()
    print(t2)

    当我把最后一个元素删除时,你会发现Python的解释器会报错,说明了元组不能自身实现增删改的操作。

    字典

    字典的创建和集合差不多,都用大括号,但字典使用的是键值对

    创建一个字典:

    d1 = {'one': 1, 'two': 2}
    print(d1)

    显示结果为:{'two': 2, 'one': 1}

    成员检测:

    检测的是key键

    print('one' in d1)
    print(1 in d1)

    显示结果:

    True
    False

    在存储是,字典会按照key进行哈希存储,所以只能检测key是否存在

    字典的循环

    for i in d1:
        print(i)
    #  two
    #  one
    
    for k in d1.keys():
        print(k)
    # one
    # two
    
    for v in d1.values():
        print(v)
    # 1
    # 2
    
    for k, v in d1.items():
        print(k , '-----' , v)
    # one ----- 1
    # two ----- 2

    我们在取字典值的时候,可以使用get。

    print(d1.get('one'))
    print(d1.get('three'))

    显示结果

    1

    None

    没有此键时,显示结果为None,而不会报错,而用d1['three']时,会报错。

    集合

    创建一个集合

    s1 = {2, 3, 2, 4, 3, 2, 8}
    print(s1)

    结果为:{8, 2, 3, 4}

    说明了集合的一个作用是:去重,一个集合看起来基本上是无序的。

    集合增加元素:

    s1.add(1)
    print(s1)

    集合删除元素:

    如果能记住,建议用discard。当集合中没有此元素时,不会报错。

    s1.discard(1)  # 把集合中的1删除
    print(s1)
    s1.discard(1)  # 集合中已经没有1 但没有报错
    print(s1)

    也可以使用remove,但没有此元素时,会报错

    集合适用于减法:

    s3 = {2, 3, 4}
    s4 = {4, 5}
    print(s3 - s4)

    显示结果为:{2, 3}

    会把s3集合中的与s4相同的元素删除

  • 相关阅读:
    SqlServer实现Oracle的wm_concat()函数功能
    WebApi异常过滤器
    C#DataTable转List<Models>
    C#访问Oracle或SqlServer数据库遍历添加参数
    C#+.netFrameWork4.5.2+WebAPI+Jquery+Ajax跨域请求问题
    VS2015+Windows服务简易教程+文件夹监听
    C# rpt 批量打印写法
    C#model序列化xml
    oracle em无法连接数据库实例
    childNodes与children
  • 原文地址:https://www.cnblogs.com/abc23/p/10162966.html
Copyright © 2011-2022 走看看