• Python基础---------数据类型


    一、变量的命名规则

    1.必须使用英文字母,数字,下划线组成
    2.不能是数字开头,更不能是纯数字
    3.要有意义
    4.不要太长
    5.不要用中文
    6.禁止用关键字或命令
    7.区分大小写
    8.推荐使用两种形式
    驼峰式:大小写字母混合
    下划线:单词间加下划线分开

    但是在python中, 程序员不用关心内存溢出等问题,因为python已经帮忙实现了内存管理。
    1、引用计数器
    2、垃圾回收机制
    每个对象都会维护一个自己的引用计数器,每次对其引用,计数器就会加1.当一个对象的计数器为零时,垃圾回收机制就会把他从内存中清除,释放它之前占用的内存空间。

    1.1 编码

    编码类型:
    ASCII: 英文字母, 数字, 特殊字符, 8bit 1byte
    GBK: 中文 国标码.16bit 2byte
    unicode: 万国码. 32bit 4byte
    utf-8: 英文: 8bit 1byte 欧洲文字:16bit 2byte 中文: 24bit 3byte

    二、数据类型

    在内存中存储的数据可以由多种类型。
    Python定义了一些标准类型,用于存储各种类型的数据。
    五个标准数据类型:number数字,string字符串,list列表,tuple元组,dictionary字典,bool布尔值
    相关内容:
    int 整数
    str 字符串, 存储少量的数据
    bool 布尔
    list 列表, ["大阳哥", "东阳哥", ]
    tuple 元组. 只读列表, 不能改
    dict 字典; 一对一对的存储数据. key:value {"赵阳":"大阳哥", 'jay':"周杰伦"}
    set 集合. 存储不重复的内容

    三、 number数字

    Python数字类型用于存储数值
    数值类型是不允许改变的,这意味着如果改变数字类型的值,将重新分配内存空间
    示例:var = 10
    可以用del语句删除一些数字对象的引用,多个对象以逗号分开
    示例: del var
    del var_a,var_b

    3.1 Python支持三种不同的数值类型:

    【整型int,浮点型float,复数complex】
    整型(int):通常被称为整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。
    浮点型(float):浮点型由整数部分和小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)
    复数(complex): 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。

    3.2 数字类型转换

    有时候,我们需要对数据内置的类型进行转换,数据类型的转换,只需要将数据类型作为函数名即可

    • int(x) 将x转换为一个整数。
    • float(x) 将x转换到一个浮点数。
    • complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
    • complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
    以下实例将浮点数变量a转换为整数:  
    a = 1.0  
    print (int(a))  
    1  
    

    3.3 数字运算

    Python解释器可以作为一个简单的计算器,您可以在解释器里输入一个表达式,它将输出表达式的值.表达式的语法很直白: +, -, * 和 /, 和其它语言(如Pascal或C)里一样。

    例如:
    >>> 2 + 2  
    4  
    >>> 50 - 5*6  
    20  
    >>> (50 - 5*6) / 4  
    5.0  
    >>> 8 / 5  # 总是返回一个浮点数  
    1.6  
    

    在整数除法中,除法 / 总是返回一个浮点数,如果只想得到整数的结果,丢弃可能的分数部分,可以使用运算符 // :

    例如:
    >>> 17 / 3  # 整数除法返回浮点型  
    5.666666666666667  
    >>>  
    >>> 17 // 3  # 整数除法返回向下取整后的结果  
    5  
    >>> 17 % 3  # %操作符返回除法的余数  
    2  
    >>> 5 * 3 + 2   
    17 
    

    幂运算

    例如:
    >>> 5 ** 2  # 5 的平方  
    25  
    >>> 2 ** 7  # 2的7次方  
    128 
    

    不同类型的数混合运算时会将整数转换为浮点数

    例如:
    >>> 3 * 3.75 / 1.5  
    7.5  
    >>> 7.0 / 2  
    3.5  
    

    在交互模式中,【最后被输出的表达式结果被赋值给变量 _】

    例如:
    >>> tax = 12.5 / 100  
    >>> price = 100.50  
    >>> price * tax  
    12.5625  
    >>> price + _  
    113.0625  
    >>> round(_, 2)  
    113.06  
    # 此处,_ 变量应被用户视为只读变量  
    

    3.4 随机函数

    随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。
    Python包含以下常用随机数函数

    函数	                            描述
    [choice(seq)]	                    从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
    [randrange ([start,] stop [,step])] 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1
    [random()]	                    随机生成下一个实数,它在[0,1)范围内。
    [seed([x])]	                    改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
    [shuffle(lst)]	                    将序列的所有元素随机排序
    [uniform(x, y)]                     随机生成下一个实数,它在[x,y]范围内。
    

    四、 字符串string

    字符串或串(String)是由数字、字母、下划线组成的一串字符.
    在Python中,凡是用引号引起来的都是字符串。字符串可以用单引号、双引号或者三引号引起,没什么区别,只是一些特殊的格式需要不用的引号,想多行赋值一个字符串,就需要三引号

    1. str索引和切片:
      索引:起始下标是0(从左到右), (-1)从右到左
      切片: s[起始位置: 结束位置: 步长]
      特点:顾头不顾尾

    2. 字符串的常用操作: 常用方法
      字符串不可变.

      1. upper() 转换成大写 #重点
      2. strip() 去掉左右两边的空格或数据 #重点
      3. replace() 替换 #重点
      4. split() 切割
      5. format() 格式化输出
      6. startswith() 判断是否以xxx开头
      7. find() 查找. 找不到返回-1 #重点
      8. len() 内置函数. 直接使用. 不用点操作 求字符串的长度
    3. 迭代
      for 变量 in 字符串:
      循环体
      else:

    如果你要实现从字符串中获取一段子字符串的话,可以使用 [头下标:尾下标] 来截取相应的字符串,其中下标是从 0 开始算起,可以是正数或负数,下标可以为空表示取到头或尾。
    [头下标:尾下标] 获取的子字符串包含头下标的字符,但不包含尾下标的字符。

    比如:
    str = 'Hello Wrold'
    print (str)
    print (str[0])
    print (str[2:5])
    print (str[2:])
    print (str * 2)
    print (str + "TEST")
    
    Hello Wrold
    H
    llo
    llo Wrold
    Hello WroldHello Wrold
    Hello WroldTEST
    

    4.1 字符串更新示例

    #改变大小写
     s = "alex and wusir and taibai"
     s1 = s.capitalize()  # 首字母大写
     print(s)    # 原字符串不变
     print(s1)
    
     s = "Alex is not a Good Man. "
    
    # print(s.upper())
    # print(s.lower())
    # 在程序需要判断不区分大小写的时候. 肯定能用上
     while True:
         content = input("请喷:")
         if content.upper() == 'Q':
             break
         print("你喷了:", content)
    
    # s = "taiBai HenBai feicahngBai"
    # print(s.swapcase()) # 大小写转换
     s = "al麻花藤ex and wu sir sir se"
     print(s.title())
    
     s = "麻花藤"
     print(s.center(9, "*"))
     username = input("用户名:").strip()    # 去掉空格.
     password = input("密码:").strip()     # 去掉空格
     if username == 'alex' and password == '123':
         print("登录成功")
     else:
         print("登录失败")
    
     s = "*******呵a呵呵呵****************"
    
    # print(s.strip("*"))   # strip去掉的是左右两端的内容. 中间的不管
    
     s = "alex wusir alex sb taibai"
     s1 = s.replace("alex", "晓雪") # 原字符串不变
     print(s1)
    
     # 去掉上述字符串中的所有空格
     s2 = s.replace(" ", "")
     print(s2)
    
    
    # s3 = s.replace("alex", "sb", 2)
    # print(s3)
    #
    # s = "alex_wuse_taibai_bubai"
    # lst = s.split("_taibai_")    # 刀是_  切完的东西是列表. 列表装的是字符串
    # print(lst)
    
    
    # s = "我叫{}, 我今年{}岁了, 我喜欢{}".format("sylar", 18, "周杰伦的老婆")
    # print(s)
    
    # 可以指定位置
    # s = "我叫{1}, 我今年{0}岁了, 我喜欢{2}".format("sylar", 18, "周杰伦的老婆")
    # print(s)
    
    # s = "我叫{name}, 我今年{age}岁了, 我喜欢{mingxing}".format(name="sylar", mingxing="汪峰的老婆", age=18)
    # print(s)
    
    # 你喜欢用哪个就用哪个
    
    
     s = "汪峰的老婆不爱汪峰"
     print(s.startswith("汪峰"))   # 判断字符串是否以xxx开头
     print(s.endswith("爱妃"))     # 判断字符串是否以xxx结尾
     print(s.count("国际章"))   # 计算xxx在字符串中出现的次数
     print(s.find("汪峰", 3))    # 计算xxx字符串在原字符串中出现的位置, 如果没出现返回 -1
     print(s.index("国际章"))    # index中的内容如果不存在. 直接报错
    
     s = "abc123"
     print(s.isdigit())  # 判断字符串是否由数字组成
     print(s.isalpha())  # 是否由字母组成
     print(s.isalnum())  # 是否由字母和数字组成
    
     s = "二千136万萬"
     print(s.isnumeric())    # 数字
    
     s = "你今天喝酒了么"
     i = len(s)  #  print() input() len() python的内置函数
     print(i)
    
    # i = s.__len__() # 也可以求长度 len()函数执行的时候实际执行的就是它
    # print(i)
    
    • 遍历字符串
    # 把字符串从头到尾进行遍历
     s = "晓雪老师.你好漂亮"
     print(len(s))   # 长度是:8 索引到7
    # 1. 使用while循环来进行遍历
     count = 0
     while count < len(s):
         print(s[count])
         count = count + 1
    
    # 2. 用for循环来遍历字符串
     优势:简单
     劣势:没有索引
     for c in s: # 把s中的每一个字符交给前面的c 循环
         print(c)
    
    # 语法:
    #     for bianliang  in  可迭代对象:
    #         循环体
    

    4.2 转义字符

    在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表:

    转义字符	        描述
    (在行尾时)	续行符
    		反斜杠符号
    '		单引号
    "		双引号
    a		响铃
    		退格(Backspace)
    00		空
    
    		换行
    v		纵向制表符
    			横向制表符
    
    		回车
    f	 	换页
    oyy		八进制数,yy 代表的字符,例如:o12 代表换行,其中 o 是字母,不是数字 0。
    xyy		十六进制数,yy代表的字符,例如:x0a代表换行
    other		其它的字符以普通格式输出
    

    4.3 字符串运算符

    下表实例变量a值为'hello',b变量值为'Python

    操作符	 描述								       实例
    +	 字符串连接	   				                       a + b 输出结果: HelloPython
    *	 重复输出字符串							       a*2 输出结果:HelloHello
    []	 通过索引获取字符串中字符						       a[1] 输出结果 e
    [ : ]	 截取字符串中的一部分,遵循左闭右开原则,str[0,2] 是不包含第 3 个字符的。   a[1:4]  输出结果 ell
    in	 成员运算符 - 如果字符串中包含给定的字符返回 True			      'H' in a 输出结果 True
    not in	 成员运算符 - 如果字符串中不包含给定的字符返回 True			      'M' not in a 输出结果 True
    %	 格式字符串							      请看下面
    

    4.4 字符串格式化

    Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
    **在Python中,字符串格式化使用与C中sprintf函数一样的语法.

    例如:
    print('我叫%s 今年 %d 岁!' % ('小明',10))
    我叫小明 今年 10 岁!
    

    Python字符串格式化符号

    符 号	描述
    %c		格式化字符及其ASCII码
    %s		格式化字符串
    %d		格式化整数
    %u		格式化无符号整型
    %o		格式化无符号八进制数
    %x		格式化无符号十六进制数
    %X		格式化无符号十六进制数(大写)
    %f		格式化浮点数字,可指定小数点后的精度
    %e		用科学计数法格式化浮点数
    %E		作用同%e,用科学计数法格式化浮点数
    %g		%f和%e的简写
    %G		%f 和 %E 的简写
    %p		用十六进制数格式化变量的地址
    

    Python三引号
    **Python三引号允许一个字符串跨多行,字符串中包含换行符、制表符以及其他符号

    例如:
    para_str = """这是一个多行字符串的实例
    多行字符串可以使用制表符
    TAB(	).
    也可以是使用换行符[
    ].
    """
    print(para_str)
    
    # 以上实例输出结果为
    这是一个多行字符串的实例
    多行字符串可以使用制表符
    TAB(    ).
    也可以是使用换行符[
    ].
    # 三引号让程序员从引号和特殊字符的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的所见即得格式.
    # 一个典型用例是,当你需要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义会非常的繁琐.
    

    4.5 f-string字面量格式化字符串

    f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。之前我们习惯用百分号 (%):

    >>> name = 'Runoob'  
    >>> 'Hello %s' % name  
    'Hello Runoob'
    # f-string格式和字符串以f开头,后面跟着字符串,字符串中的表达式用大括号{}包起来,
    # 他会将变量或表达式计算后的值替换进去,实例如下.
    
    name = 'Runoob'
    print(f'Hello {name}')
    
    age = 20
    print(f'{age+1}')
    
    w = {'name':'Runoob','url':'www.runoob.com'}
    print(f'{w["name"]}:{w["url"]}')
    
    Hello Runoob
    21
    Runoob:www.runoob.com
    

    在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。
    在Python3中,所有的字符串都是Unicode字符串

    4.6 字符串内建函数

    Python的字符串常用内建函数如下:

    序号	方法及描述
    1	capitalize() 将字符串的第一个字符转换为大写
    2	center(width, fillchar)返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
    3	count(str, beg= 0,end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
    4	bytes.decode(encoding="utf-8", errors="strict")Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。
    5	encode(encoding='UTF-8',errors='strict')以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
    6	endswith(suffix, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False
    7	expandtabs(tabsize=8)把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。
    8	find(str, beg=0, end=len(string))检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
    9	index(str, beg=0, end=len(string))跟find()方法一样,只不过如果str不在字符串中会报一个异常.
    10	isalnum()如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False
    11	isalpha()如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False
    12	isdigit()如果字符串只包含数字则返回 True 否则返回 False..
    13	islower()如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
    14	isnumeric()如果字符串中只包含数字字符,则返回 True,否则返回 False
    15	isspace()如果字符串中只包含空白,则返回 True,否则返回 False.
    16	istitle()如果字符串是标题化的(见 title())则返回 True,否则返回 False
    17	isupper()如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
    18	join(seq)以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
    19	len(string) 返回字符串长度
    20	ljust(width[, fillchar])返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
    21	lower() 转换字符串中所有大写字符为小写.
    22	lstrip()截掉字符串左边的空格或指定字符。
    23	maketrans()创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
    24	max(str)返回字符串 str 中最大的字母。
    25	min(str)返回字符串 str 中最小的字母。
    26	replace(old, new [, max])把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。
    27	rfind(str, beg=0,end=len(string))类似于 find()函数,不过是从右边开始查找.
    28	rindex( str, beg=0, end=len(string))类似于 index(),不过是从右边开始.
    29	rjust(width,[, fillchar])返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
    30	rstrip()删除字符串字符串末尾的空格.
    31	split(str="", num=string.count(str))num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
    32	splitlines([keepends])按照行('
    ', '
    ', 
    ')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
    33	startswith(substr, beg=0,end=len(string))检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
    34	strip([chars])在字符串上执行 lstrip()和 rstrip()
    35	swapcase()将字符串中大写转换为小写,小写转换为大写
    36	title()返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
    37	translate(table, deletechars="")根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中
    38	upper()转换字符串中的小写字母为大写
    39	zfill (width)返回长度为 width 的字符串,原字符串右对齐,前面填充0
    40	isdecimal()检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。
    

    五、布尔值bool

    布尔值就是true和false

    5.1 布尔值用法

    bool: 类型转换
    1. 你想转换成什么. 就用什么把目标包裹起来
    2. 带空的是False, 不带空的True

    5.2 布尔值示例

    # 字符串转换成数字
    # s = "128"
    # i = int(s)
    # print(type(i))
    #
    # ss = str(i)
    # print(type(ss))
    # # 综上可以得出. 你想转换成什么就用什么把目标括起来
    #
    # # bool类型转换成数字  True: 1  False:0
    # b = False
    # c = int(b)
    # print(c)
    
    # int转换成bool  零: False 非零: True
    # a = 0
    # b = bool(a)
    # print(b)
    
    
    # while 1:    # 1的效率比true 稍微高一点点
    #     print("alex是个大xx")
    
    # s = ""  #  "" 空字符串表示False, 非空字符串表示:True
    # if s:
    #     print("哈哈")
    # else:
    #     print("呵呵")
    
    # 空的东西都是False, 非空的东西都是True
    
    # m = None    # 空 连空气都不如. 真空, False
    # if m :
    #     print("a")
    # else:
    #     print("b")
    

    六、列表list

    列表是python的基础数据类型之一 ,其他编程语⾔也有类似的数据类型. 比如JS中的数组, java中的数组等等. 它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型:
    lst = [1, '哈哈', "吼吼", [1,8,0,"百度"], ("我","叫", "元", "组"), "abc", {"我叫":"dict字典"},{"我叫集合","集合"}]

    列表相比于字符串. 不仅可以存放不同的数据类型. 而且可以存放⼤量的数据. 32位python可以存放: 536870912个元素, 64位可以存放: 1152921504606846975个元素.⽽且列表是有序的(按照你保存的顺序),有索引, 可以切片方便取值.

    • 示例:
     lst = [1, "周杰伦", True, False, ["可口可乐", "雪碧", "芬达"] ]
     print(lst)
    
     lst = ["大阳哥", "赵明杰", "UZI", "赛利亚", "克伦特", "梅西", "哈登"]
     print(lst[3])
     print(lst[1:3])
     print(lst[-1::-2])  # -1  - 从右往左. 1 : 一个一个取
    

    6.1 增删改查

    • 列表的增加
     lst = ["周杰伦", "王力宏", "周润发"]
     lst.append("伍佰")    # 向列表中添加一个元素, 元素放在末尾. 把一个元素追加到列表的末尾
     print(lst)
    
     lst.append("周星星")
     print(lst)]
    
     lst.insert(1, "马化腾")    # 把元素插入到指定位置. 元素的移动
     print(lst)
    
     lst.extend(["马云", "王健林", "李嘉诚"])    # 迭代添加
     print(lst)
    
     lst = []
     while 1:
         name = input("请输入学生的名字")
         if name.upper() == "Q":
             break
         else:
             lst.append(name)    # 把名字添加到列表
    
     print(lst)
    
    • 删除
     lst = ["盖伦", "大白梨", "提莫", "大白梨"]
    
     1. pop()
     e = lst.pop()   # 返回删除的元素, 删除最后一个
     print(e)
     print(lst)
     e = lst.pop(1)  # 根据给出的索引进行删除
     print(e)
     print(lst)
    
     2. remove(元素)
     lst.remove("大白梨")
     lst.remove("大白梨")
     print(lst)
    
     3. del 删除 切片删除     delete
     del lst[1:]
     print(lst)
    
     4. clear 清空
     lst.clear()
     print(lst)
    
    • 修改
    # 索引修改
    # lst = ["太白", "五色", "银王", "日天"]
    # lst[0] = "太黑"
    # print(lst)
    # lst[2] = "银角大王"
    # print(lst)
    
    • 切片修改
    # lst[1:3] = "马化腾"    # 迭代修改
    # print(lst)
    # lst[1:3] = ["周杰伦", "他媳妇", "王力宏媳妇"]
    # print(lst)
    
    • 查询
    # lst = ["舒克贝塔", "黑猫警长", "熊大熊二", "葫芦娃", "吴佩琪"]
    # for el in lst:  #  element元素
    #     print(el)
    

    6.2 常用操作

    常用操作:

    1. len()
    2. count()
    3. sort() 排序
    # lst = ["王尼玛", "我记着你", "伟哥", "放学天台见","王尼玛", "王尼玛"]
    # print(len(lst))
    # print(lst.count("王尼玛"))
    
    lst = [1, 9, 18, 2 , 34, 88, 7, 9]
    
    # lst = ["2王尼玛", "马化腾", "1马云", "马云云", "阿里巴巴", "1王尼玛"]
    lst.sort()  # 升序
    lst.sort(reverse=True)  # 倒序
    print(lst)
    list
    

    6.3 list的嵌套

    采用降维操作,一层一层的看就好
    示例:

    lst = [1, "太白", "wusir", ["马虎疼", ["可口可乐"], "王剑林"]]
    
    # 找到wusir
    print(lst[2])
    
    # 找到太⽩和wusir
    print(lst[1:3])
    
    # 找到太白的白字
    print(lst[1][1])
    
    # 将wusir拿到. 然后首字母大写. 再扔回去
    s = lst[2]
    s = s.capitalize()
    lst[2] = s
    print(lst)
    
    # 简写
    lst[2] = lst[2].capitalize()
    print(lst)
    
    # 把太白换成太黑
    lst[1] = lst[1].replace("白", "黑")
    print(lst)
    
    # 把马虎疼换成马化疼
    lst[3][0] = lst[3][0].replace("虎", "化")
    print(lst[3][0])
    lst[3][1].append("雪碧")
    print(lst)
    

    七、元组tuple

    元组: 俗称不可变的列表.又被成为只读列表, 元组也是python的基本数据类型之一, 用小括号括起来,逗号分开, 里面可以放任何数据类型的数据, 查询可以. 循环也可以. 切片也可以. 但就是不能改。但是元组内部的子列表可以改

    注意:元组里的数据少于2个的时候,会被当成其他数据类型,需要添加一个逗号
    tu = (108) [int数值]
    tu = ("字符串") [string字符串]
    print(type(tu))

    空元组:
    tu = tuple(

    示例:

    tu = (1, "太⽩", "李⽩", "太⿊", "怎么⿊")
    print(tu)
    print(tu[0])
    print(tu[2])
    print(tu[2:5]) # 切⽚之后还是元组
    
    # for循环遍历元组
    for el in tu:
     print(el)
    
    # 尝试修改元组
    # tu[1] = "麻花疼" # 报错 'tuple' object does not support item assignment
    
    #修改元组中的子列表
    tu = (1, "哈哈", [], "呵呵")
    # tu[2] = ["fdsaf"] # 这么改不了
    tu[2].append("麻花藤") # 可以改了. 没报错
    tu[2].append("王剑林")
    print(tu)
    

    八、range

    range可以帮我们获取到一组数据. 通过for循环能够获取到这些数据,类似seq

    for num in range(10):
     print(num)
    结果:1 2 3 4 5 6 7 8 9 10
    
    for num in range(1, 10, 2): 
     print(num)
    结果:1 3 5 7 9
    
    for num in range(10, 1, -2): # 反着来, 和切片一样
     print(num)
    结果:10 8 6 4 2 0
    

    示例:

    #求1-2+3-4....+99-100=?
    sum = 0 
    for i in range(1,101):
        if i % 2 == 0:
           sum = sum -i 
        else:
           sum = sum +i 
    print(sum)
    

    九、dict字典

    9.1 dict字典简介

    用大括号{} 括起来. 内部使用key:value的形式来保存数据
    {'jay':'周杰伦', "jj":'林俊杰'}
    注意:字典的key必须是可哈希的, 不可变的, value 没有限制,不是按照我们保存的顺序保存的, 无序的

    9.2 dict增删改查

    1. dict[不存在的key] = value, setdefault()
    2. pop(key). del dict[key]. popitem(), clear()
    3. dict[存在的key] = 新值, d1.update(d2) 把d2的k-v更新到d1中
    4. get(key, 默认值), setdefault(), dict[key]

    9.3 示例

    • 增加的2种方式:
    (1)
    dic = {"昆凌":"周杰伦的老婆"}
    dic['国际章'] = "汪峰的老婆"  #新增
    dic['国际章'] = "老外"        #再新增,如果key重复了,会替换掉原来的value
    print(dic)
    结果:{'昆凌':'周杰伦的老婆',国际章':'老外'}
    
    (2)
    dic = {"昆凌":"周杰伦的老婆"}
    dic.setdefault("马蓉","王宝强的前任老婆")
    print(dic)
    结果:{'昆凌': '周杰伦的老婆', '马蓉': '王宝强的前任老婆'}
    
    • 删除的三种方式
    准确删除。删除一个元素,返回这个元素的value值
    ret = dic.pop("jay")
    print(ret)
    del dic["jay"]
    print(dic)
    
    # 随机删除。返回给一个元组
    ret = dic.popitem()
    
    # 清空字典中的所有内容
    dic.clear()
    
    • 修改
    dic = {"id": 123, "name": 'sylar', "age": 18}
    dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"}
    dic.update(dic1) # 把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存在key, 则新增.
    print(dic)
    print(dic1)
    
    dic = {"id":1, 'name':'李嘉诚', 'money':10000000}
    # 李嘉诚赔了500
    dic['money'] = dic['money'] - 500   # 用key去修改
    print(dic)
    
    • 查询
    print(dic['name'])
    print(dic['sylar']) # 如果key不在就报错
    print(dic.get("ok"))
    print(dic.get("sylar")) #如果key不存在,返回None
    print(dic.get("sylar", "牛B")) #如果key存在就正常报,key不存在,返回自定义值-牛B
    
    1. 首先判断原来的字典中有没有这个key . 如果没有. 执行新增
    2. 用这个key去字典中查询, 返回查到的结果
    dic = {"及时雨":"宋江", "易大师":"剑圣"}
    ret = dic.setdefault("及时雨", "西门庆")
    print(dic)  
    print(ret)  
    

    9.4 dict字典的常用方法

        1. keys() 返回所有字典的key的集合(高仿列表)
        2. values() 返回所有的value的集合
        3. items()  返回键值对. 元组
        解构:
            a, b = (1, 2)
    
    • 示例:
    dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科比"}
    print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不用管它是什么.当成list来用就行
    for key in dic.keys():
     print(key)
    print(dic.values())  # dict_values([123, 'sylar', 18, '科比']) 一样. 也当list来用
    
    for value in dic.values():
     print(value)
    print(dic.items())  # dict_items([('id', 123), ('name', 'sylar'), ('age',18), ('ok', '科比')]) 这个东西也是list. 只不过list中装的是tuple
    
    
    
    # 解构,解包:将元组的每个元素赋值给前面的变量
    a, b = 1, 2
    print(a, b)
    结果:1,2
    
    (c, d) = 3, 4
    print(c)
    结果:3
    
    e, f = [1, 2, 3] # 解构的时候注意数量必须匹配
    print(e, f)
    结果:
    
    dic = {"及时雨":"宋江", "易大师":"剑圣"}
    for key, value in dic.items(): #这个是解构,直接dic.items就能取k,v值
     print(dic.items())
    结果:dic.items([('及时雨','宋江'), ('易大师','剑圣')])
    
    dic = {"及时雨":"宋江", "易大师":"剑圣"}
    for key, value in dic.items(): #这个是解构
     print(key, value)
    结果:及时雨 宋江
          易大师 剑圣
    

    9.4 字典的嵌套

    # 字典的嵌套
    dic1 = {
     "name": "汪峰",
     "age": 18,
     "wife": {
     "name": '章子怡',
     "age": 28
     },
     "children": ['第一个小孩', '第二个小孩'],
     "desc": '峰哥不会告我吧. 没关系. 我想上头条的'
    }
    print(dic1.get("wife").get("name"))
    print(dic1.get("children"))
    print(dic1.get("children")[1])
    

    9.5 字典的for循环

    字典的for循环

    dic = {1:'a',2:'b',3:'c'}
    for a in dic: #直接循环字典,拿到的是key
    print(a)
    print(dic[a])	   
    结果:1 a 2 b 3 c
    

    十、set集合

    set集合是python的一个基本数据类型. 一般不是很常用. set中的元素是不重复的.无序的.里面的元素必须是可hash的(int, str, tuple,bool), 我们可以这样来记. set就是dict类型的数据但是不保存value, 只保存key. set也用{}表示

    注意: set集合中的元素必须是可hash的, 但是set本⾝是不可hash得. set是可变的.

    set1 = {'1','alex',2,True,[1,2,3]} # 报错
    set2 = {'1','alex',2,True,{1:2}} # 报错
    set3 = {'1','alex',2,True,(1,2,[2,3,4])} # 报错
    

    set中的元素是不重复的, 且无序的.

    s = {"周杰伦", "周杰伦", "周星星"}
    print(s)
    结果:{'周星星', '周杰伦'}
    

    使用这个特性.我们可以使用set来去掉重复

    # 给list去重复
    lst = [45, 5, "哈哈", 45, '哈哈', 50]
    lst = list(set(lst)) # 把list转换成set, 然后再转换回list
    print(lst)
    

    set集合增删改查

    1. 增加
    s = {"刘嘉玲", '关之琳', "王祖贤"}
    s.add("郑裕玲")
    print(s)
    s.add("郑裕玲") # 重复的内容不会被添加到set集合中
    print(s)
    
    s = {"刘嘉玲", '关之琳', "王祖贤"}
    s.update("麻花藤") # 迭代更新
    print(s)
    s.update(["张曼玉", "李若彤","李若彤"])
    print(s)
    
    1. 删除
    s = {"刘嘉玲", '关之琳', "王祖贤","张曼玉", "李若彤"}
    item = s.pop() # 随机弹出一个.
    print(s)
    print(item)
    
    s.remove("关之琳") # 直接删除元素
    # s.remove("马虎疼") # 不存在这个元素. 删除会报错
    print(s)
    
    s.clear() # 清空set集合.需要注意的是set集合如果是空的. 打印出来是set() 因为要和dict区分的.
    print(s) # set()
    
    1. 修改
    # set集合中的数据没有索引. 也没有办法去定位⼀个元素. 所以没有办法进⾏直接修改.
    # 我们可以采⽤先删除后添加的⽅式来完成修改操作
    s = {"刘嘉玲", '关之琳', "王祖贤","张曼玉", "李若彤"}
    # 把刘嘉玲改成赵本山
    s.remove("刘嘉玲")
    s.add("赵本山")
    print(s)
    
    1. 查询
    # set是⼀个可迭代对象. 所以可以进⾏for循环
    for el in s:
     print(el)
    
    1. 常用操作
    s1 = {"刘能", "赵四", "皮长山"}
    s2 = {"刘科", "冯乡", "皮长山"}
    
    # 交集
    # 两个集合中的共有元素
    print(s1 & s2) # {'皮长山'}
    print(s1.intersection(s2)) # {'皮长山'}
    
    # 并集
    print(s1 | s2) # {'刘科', '冯乡', '赵四', '皮长山', '刘能'}
    print(s1.union(s2)) # {'刘科', '冯乡', '赵四', '皮长山', '刘能'}
    
    # 差集
    print(s1 - s2) # {'赵四', '刘能'} 得到第一个中单独存在的
    print(s1.difference(s2)) # {'赵四', '刘能'}
    
    # 反交集
    print(s1 ^ s2) # 两个集合中单独存在的数据 {'冯乡长', '刘能', '刘科', '赵四'}
    print(s1.symmetric_difference(s2)) # {'冯乡长', '刘能', '刘科', '赵四'}
    s1 = {"刘能", "赵四"}
    s2 = {"刘能", "赵四", "皮长山"}
    
    # 子集
    print(s1 < s2) # set1是set2的⼦集吗? True
    print(s1.issubset(s2))
    
    # 超集
    print(s1 > s2) # set1是set2的超集吗? False
    print(s1.issuperset(s2))
    

    set集合本身是可以发生改变的. 是不可hash的. 我们可以使用frozenset来保存数据.
    frozenset是不可变的. 也就是一个可哈希的数据类型

    s = frozenset(["赵本山", "刘能", "皮长山", "长跪"])
    dic = {s:'123'} # 可以正常使⽤了
    print(dic)
    

    这个不是很常用. 了解一下就可以了

  • 相关阅读:
    Java中的I/O 线程 网络
    20169214 2016-2017-2 《网络攻防实践》第六周学习总结
    20169214 2016-2017-2 《网络攻防实践》第五周学习总结
    20169214 2016-2017-2 《移动平台开发实践》第五周学习总结
    20169214 2016-2017-2 《移动平台开发实践》第四周学习总结
    20169214 2016-2017-2 《网络攻防实践》第四周学习总结
    20169214 2016-2017-2 《网络攻防实践》第三周学习总结
    20169214 2016-2017-2 《移动平台开发实践》第三周学习总结
    20169214 2016-2017-2《网络攻防实践》第二周学习总结
    Android开发设计 实验报告
  • 原文地址:https://www.cnblogs.com/wangchengshi/p/12930562.html
Copyright © 2020-2023  润新知