zoukankan      html  css  js  c++  java
  • Python_基础_(列表,元组,字典,集合)

    一,列表

      ################## 列表中的基本操作 ################## 

      1.列表的基本形式

    Li = [1,2,3,”henry”,”hello”,[“hhhh”,”aaaa”]]

    # 用中括号括起来

    # 利用逗号分割每个元素

    # 列表是有序的

    # 列表中的元素可以是数字,字符串,也可以嵌套列表,也可以是布尔值

      2.列表为可迭代类型,支持for循环,也支持whilw循环

      3.列表的存储与字符串的存储方式不同,列表通过链表进行存储,不需要连续的空间,列表元素可在原列表中进行修改,不必创建新的列表(对字符串的修改相当于创建新的空间来存放字符串)

      4.列表索引或切片

      5.用索引来删除元素  del [1]

      6.利用切片来删除元素  del [0:3]

      7.in   操作 # 判断一个元素或字符串是否在列表中

    >>> test = ["aaa","b","ccc",1,2,3,]
    >>> a = "aaa" in test
    >>> a
    True
    >>> 

      8.将一个字符串转为列表(不能对数字进行for循环,所以不能将数字转为列表)

    >>> test = "helloworld"
    >>> new_test = list(test)
    >>> new_test
    ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
    >>> 

      9.将字符串进行拼接

    test_list = [11,22,33,"hello","world"]
    s = " "
    for item in test_list:
        s = s + str(item)
    print(s)
    
    # 输出
    112233helloworld
    
    ################################ 当列表中只包含字符串时,有数字时不能用join进行拼接
    test_list = ["hello","world"]
    print(",".join(test_list))
    
    # 输出为
    hello,world

       ################## 列表中的方法 ################## 

      1.test.append(x)  # 在列表test后追加元素x

      2.test.clear()  # 清空列表

      3.test_new = test.copy()  # 浅拷贝

      4.test.count(x)  # 计算列表中元素x的出现次数,不带参数则报错

      5.append() 和 extend() 的区别

    # append()    
    # 将括号中的列表当成一个元素
    >>> test = [1,2,3,4,5]
    >>> test.append([111,"hello"])
    >>> test
    [1, 2, 3, 4, 5, [111, 'hello']]
    
    # extend()
    # 将列表的每个元素插入
    >>> test = [1,2,3,4,5]
    >>> test.extend([111,"hello"])
    >>> test
    [1, 2, 3, 4, 5, 111, 'hello']
    >>> 
    
    # 插入字符串
    test.extend("aaa")    # [1, 2, 3, 4, 5, 'a', 'a', 'a']
    test.append("aaa")    # [1, 2, 3, 4, 5, 'aaa']

      6.test.index(a,start=None,end=None)  # 查找,找到第一个就停止查找,指定开始statrt,结束end位置,返回索引值

      7.test.insert(0,99)  # 在指定的位置插入指定元素,在索引0处插入元素99,原先索引位置的元素往后移

      8.a = test.pop(x)  # 删除索引x处的元素(默认删除最后一个元素),并返回当前被删除的值

    >>> test = [1,2,3,4,5]
    >>> a = test.pop(2)
    >>> a
    3

      9.test.remove(a)  # 删除列表中指定的元素 a,删除列表从左到右第一个元素a

      10.test.reverse()  # 将列表test反转

    >>> test = [1,2,3,2,4,5]
    >>> test.reverse()
    >>> test
    [5, 4, 2, 3, 2, 1]
    >>> 

      11.test.sort()  # 将当前列表进行排序,默认从小到大,括号中可指定从大到小  reverse=True

    二,元组

       1.基本形式:tu = (11,22,33,44,55)

      2.特性:元素不能被修改,不能增加或删除元素,元组为有序的

      3.一般写元组时,在元组的最后加上一个","(对长度没有影响) 用来区别元组和方法

      4.对元组进行切片,索引 tu[1:2]  tu[0]

      5.元组/列表/字符串,三者之间可以进行相互转换 

    # 元组->列表
    tu = (1,2,4,"111","hello")
    li = list(tu)
    print(li)    
    # [1, 2, 4, '111', 'hello']
    
    
    # 列表->元组
    li = [1,2,4,"111","hello"]
    tu = tuple(li)
    print(tu)
    # (1, 2, 4, '111', 'hello')
    
    
    # 列表->字符串
    li = [1,2,4,"111","hello"]
    s = str(li)
    print(s)
    # [1, 2, 4, '111', 'hello']
    
    
    # 字符串->列表
    s = "1,2,4,111,hello"
    li = list(s)
    print(li)
    # ['1', ',', '2', ',', '4', ',', '1', '1', '1', ',', 'h', 'e', 'l', 'l', 'o']
    
    
    # 元组->字符串
    tu = (1,2,4,"111","hello")
    s = str(tu)
    print(s)
    #(1, 2, 4, '111', 'hello')
    
    
    # 字符串->元组
    s = "1,2,4,111,hello"
    tu = list(s)
    print(tu)
    # ['1', ',', '2', ',', '4', ',', '1', '1', '1', ',', 'h', 'e', 'l', 'l', 'o']
    转换示例

       6.元组的一级元素不可被修改/删除/增加

    >>> tu = (1,"hello",(11,22),[11,22],True,11)
    >>> tu[0] = 2
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    >>> 

       6.若元组的二级元素不再是元组,则可对其进行修改

    >>> tu = (1,"hello",(11,22),[11,22],True,11)
    >>> tu[3][0] = 33
    >>> tu
    (1, 'hello', (11, 22), [33, 22], True, 11)
    >>> 
     三,字典

       1.字典的基本形式:info = {"k1":"v1","k2":"v2"}

      2.字典就是键值对形式:  key:value

      3.注

    value:可以是任意值,字符串,元组,列表均可
    key:数字,字符串,元组,布尔值(但应注意会和0和1会重复 出现重复只保留其中的一个)
    列表不能作为字典key
    字典不能作为字典的key

       4.当字典中的键key出现重复时 只保留其中的一个

      5.字典是无序的,例如每次打印出来的顺序会不同

      6.info["k1"] 根据键值对的键来进行查找

      7.因为字典是无序的,所以不能通过切片方式进行查找

      8.对字典进行循环,默认进行循环的是字典的key

    for item in info:

    print(item) 输出为 k1 k2

    for item in info.key:# 取得键值对的键
    print(item)

    for item in info.value:# 取得键值对的值
    print(item)

    for k,v in info.items: # 取得键值对
    print(k,v)

      ################## 字典中的方法 ##################

      1.a = dict.fromkeys(["k1 ",123,"999"],123)  # 创建一个新的字典,其中键由迭代和值设置为值

    (1, 'hello', (11, 22), [33, 22], True, 11)
    >>> a = dict.fromkeys(["k1 ",123,"999"],123)
    >>> a
    {'999': 123, 123: 123, 'k1 ': 123}
    >>> 

      2.v = info.pop('k1')  # 删除当前的键值对 并且可以获得当前所删除键值对的值

      3.v = info.popitem()   # 随机删除一个键值对 并返回所删除的值

      4.info.setdefault("k1","hello")

    # 设置值 当前的key已经存在的话  获取当前key对应的值
    # 如果key不存在的话 设置当前的键值对 并获取当前key 对应的值
    
    # 当key值存在时
    info = {"k1":"v1","k2":"v2"}
    a = info.setdefault("k1","hello")
    print(a)
    # 输出为 v1
    
    
    # 当key不存在时
    info = {"k1":"v1","k2":"v2"}
    a = info.setdefault("k3","hello")
    print(a)
    # 输出为 hello

      5.info.update({"xxx":"yyy"})  # 更新当前字典

    info = {"k1":"v1","k2":"v2"}
    a = info.update({"k3":"hello"})
    print(info)
    
    # 输出 {'k1': 'v1', 'k2': 'v2', 'k3': 'hello'}

      6.根据key获取值,存在时,返回该值,当key不存在时,返回None

    info = {"k1":"v1","k2":"v2"}
    v = info.get('k5')
    print(v) # 输出的结果为 v1
    四,集合

       # 集合基本形式:agg = {"sss",1,2,3,4,5,6}

      1.由不同的元素组成
      2.无序(不能通过下标的方式来进行访问)
      3.集合中的元素必须为不可变类型
      4.集合本身为可变类型(可进行追加元素)
      5.让集合变为不可变类型

      6.agg.add(7)  # 往集合中添加元素  只能更新一个值

      7.agg.clear()  # 清空集合

      8.agg.copy()  # 拷贝

      9.agg.remove('sss') # 删除指定的元素(当所指定的字符串不在集合中时 会产生报错)

      10.agg.discard('sss') #删除指定元素 (当删除指定的元素不在集合中时 不会产生报错)

      11.agg.pop()  # 随机删除一个元素

      12.将列表转为集合后,原列表中重复的元素会被去除

    li = ['ss','aa','ss',1,23,4]
    agg = set(li)
    print(agg)
    
    # {1, 4, 'ss', 'aa', 23}

      13.求交集

    python = ['hello','world','pycharm']
    java = ['hello','world','eclipse']
    
    python_s = set(python)
    java_s = set(java)
    
    print(python_s.intersection(java_s))
    print(python_s&java_s)
    
    ## {'world', 'hello'}
    ## {'world', 'hello'}

      14.求并集

    python = ['hello','world','pycharm']
    java = ['hello','world','eclipse']
    
    python_s = set(python)
    java_s = set(java)
    
    print(python_s.union(java_s))
    print(python_s|java_s)
    ## {'eclipse', 'hello', 'world', 'pycharm'}
    ## {'eclipse', 'hello', 'world', 'pycharm'}

      15.求差集

    python = ['hello','world','pycharm']
    java = ['hello','world','eclipse']
    
    python_s = set(python)
    java_s = set(java)
    
    print(python_s - java_s)    # python_s中有的 而java_s中没有的
    print(java_s - python_s)    # java_s中有的 而python_s中没有的
    print(python_s.difference(java_s))    # 形如 python_s - java_s
    
    ## 输出
    # {'pycharm'}
    # {'eclipse'}
    # {'pycharm'}

      16.交叉补集(先求两个集合的并集,再将并集中两个集合公共部分去除)

    python = ['hello','world','pycharm']
    java = ['hello','world','eclipse']
    
    python_s = set(python)
    java_s = set(java)
    
    print(python_s.symmetric_difference(java_s))
    print(python_s^java_s)

      17.s1.isdisjoint(s2)  # 如果s1和s2没有交集,则返回True

      18.s1.issubset(s2)  # 如果s1为s2的子集,则返回True

      19.s1.issuperst(s2)  # 如果s1为s2的父级,则返回True

      20.更多用法

    python_s.intersection_update(java_s)    # 求出交集,并将交集付给python_s
    
    python_s.difference_update(java_s)    # 求出差集,并将差集赋值给python_s
    
    python_s.update(java_s)    # 求出并集,并将值赋给python_s

    #############

    ############

    li_num= "hello"
    id(li_num) #可以得出当前存放的地址

    # 不可变类型 当给其重新赋值 会开辟一个新的空间(id号发生了变化)
    ### 字符串为不可变类型

    >>> li_num = "hello"
    >>> print(id(li_num))
    139825721992224
    >>> li_num = "world"
    >>> print(id(li_num))
    139825721992336
    >>>

    ### 数字为不可变类型

    >>> i = 1
    >>> print(id(i))
    10919424
    >>> print(id(i))
    10919424
    >>> i = i + 1
    >>> print(id(i))
    10919456
    >>> 

    ### 元组为不可变类型

    >>> tu = (1,"hello",(11,22),[11,22],True,11)
    >>> print(id(tu))
    140134117327112
    >>> tu[3][0] = 33
    >>> tu
    (1, 'hello', (11, 22), [33, 22], True, 11)
    >>> print(id(tu))
    140134117327112
    >>> 
    
    # 元组每次执行id都不一样

    ### 列表:可变类型,可以在原先的基础上对其进行改变,不需要重新开辟内存

    >>> li = [1,2,3,4]
    >>> print(id(li))
    140134148737160
    >>> li.append(5)
    >>> li
    [1, 2, 3, 4, 5]
    >>> print(id(li))
    140134148737160
    >>> 

    ### 字典为可变类型

    >>> dic = {"k1":"v1"}
    >>> print(id(dic))
    140134148741512
    >>> a = dic.setdefault("k2","v2")
    >>> print(id(dic))
    140134148741512
    >>> 

    不可变类型:字符串,数字,元组
    可变类型:列表,字典


    访问顺序:
    1.直接访问:数字
    2.顺序访问:字符串,列表,元组
    3.映射:字典

    未完待续.....

  • 相关阅读:
    .net URL加密和解密
    全面分析VB.NET文件传送
    如何美化你的.net 应用程序 (皮肤使用)
    获取机器的硬件信息(CPU ID序列号, 主板信息,硬盘序列号,系统信息)
    这是博客园的一个Bug吗?
    [转]深入理解JavaScript闭包(closure)
    【翻译】在ASP.NET中的DatePicker控件
    [翻译]ASP.NET MVC 2 Preview 1 发布了
    页面性能优化减少HTTP请求
    [翻译]C#闭包内幕(Looking Inside C# Closures)
  • 原文地址:https://www.cnblogs.com/Doaoao/p/9986582.html
Copyright © 2011-2022 走看看