zoukankan      html  css  js  c++  java
  • Python基础03-基本数据类型

    基本数据类型

    Python基本的数据类型包含数字类型、字符类型、列表、元祖、集合、字典6种。

    数字 int/float/True/False

    种类

    1. 整型int(Python3中没有长整型,int长度几乎没有限制)
    2. 浮点型float
    3. 布尔型bool
      • False: 0,0.0,'',[],(),{}
      • True: 除False以外,['']或[[],[]]不是False
    4. 复数型complex

    操作符

    +,-,*,/,//(地板除),**(乘方) - Python3中的/是真实除,1/2=0.5

    类型转换

    1. str(): 其他类型转为字符串, 如```str(12)```
    2. int(): 字符串数字转为整型(字符串不是纯整数会报错), 如```int("12")```
    3. float(): 字符串转换为浮点数,如```float("1.23")```
    

    字符串 str

    1. 字符串系统方法
      • len(): 计算字符串长度,如len("abcdefg")
      • find()/index(): 查找字符串中某个字符第一次出现的索引(index()方法查找不到会报错), 如"abcdefg".find("b"); "abcedfgg".index("g")
      • lower()/upper(): 将字符串转换为全小写/大写,如"AbcdeF".lower();"abcedF".upper()
      • isdigit()/isalpha()/isalnum(): 判断字符串是否纯数字/纯字母/纯数字字母组合, 如 isdigit("123"),结果为 True
      • count(): 查询字符串中某个元素的数量,如"aabcabc".count("a")
      • join(): 将列表元素按字符串连接,如"".join(["a","b","c"])会按空字符连接列表元素,得到"abc"
      • replace(): 替换字符串中的某已部分,如"hello,java".replace("java", "python"),将java 替换为 python
      • split(): 和join相反,将字符串按分隔符分割成列表, 如"a,b,c,d".split(",")得到["a", "b", "c", "d"]
      • strip()/lstrip()/rstrip(): 去掉字符串左右/左边/右边的无意字符(包括空格,换行等非显示字符),如" this has blanks ".strip()得到"this has balnks"
    2. 字符串格式化
      • %: 如"Name: %s, Age: %d" % ("Lily", 12)"Name: %(name)s, Age: %(age)d" % {"name": "Lily", "age": 12}
      • format: 如"Name: {}, Age: {}".format("Lily", 12)"Name: {name}, Age: {age}".format(name="Lily",age=12)
      • substitude(不完全替换会报错)/safe_substitude: 如"Name: ${name}, Age: ${age}".safe_substitude(name="Lily",age=12)
    3. 案例: 利用format生成自定义html报告
        tpl='''<html>
        <head><title>{title}</title></head>
        <body>
        <h1>{title}</h1>
        <table border=1px>
            <tr>
                <th>序号</th>
                <th>用例</th>
                <th>结果</th>
            </tr>
            {trs}
        </table>
        </body>
        </html>
        '''
    
        tr='''<tr><td>{sn}</td>
        <td>{case_name}</td>
        <td>{result}</td>
        '''
    
        title="自动化测试报告"
        case_results = [("1", "test_add_normal", "PASS"),("2", "test_add_negative", "PASS"), ("3", "test_add_float", "FAIL")]
    
        trs=''
        for case_result in case_results:
            tr_format = tr.format(sn=case_result[0], case_name=case_result[1], result=case_result[2])
            trs += tr_format
    
        html = tpl.format(title=title, trs=trs)
    
        f = open("report.html", "w")
        f.write(html)
        f.close()
    

    结果预览:

    自动化测试报告

    序号 用例 结果
    1 test_add_normal PASS
    2 test_add_negative PASS
    3 test_add_float FAIL

    列表 list

    列表元素支持各种对象的混合,支持嵌套各种对象,如["a", 1, {"b": 3}, [1,2,3]]

    1. 列表操作

      • 赋值: l = [1, "hello", ("a", "b")]
      • 获取: a = l[0] # 通过索引获取
      • 增: l.append("c");l.extend(["d","e"]);l+["f"]
      • 删: l.pop() # 按索引删除,无参数默认删除最后一个;l.remove("c") # 按元素删除
      • 改:l[1]="HELLO" # 通过索引修改
      • 查: 遍历 for i in l: print(i)
    2. 列表系统方法

      • append()/insert()/extend(): 添加/插入/扩展(连接)
      • index(): 获取元素索引
      • count(): 统计元素个数
      • pop()/remove(): 按索引/元素删除
      • sort()/reverse(): 排序/反转
      • 案例: 字符串反转s="abcdefg"; r=''.join(reversed(a))

    元组 tuple

    1. 不可改变,常用作函数参数(安全性好)
    2. 同样支持混合元素以及嵌套
    3. 只有一个元素时,必须加","号,如a=("hello",) - 因为Python中()还有分组的含义,不加","会识别为字符串

    字符串/列表/元组统称为序列, 有相似的结构和操作方法

    序列相关操作方法

    1. 索引
    - 正反索引: `l[3];l[-1]`
    - 索引溢出(IndexError): 当索引大于序列的最大索引时会报错,如[1,2,3,4]最大索引是3,引用l[4]会报IndexError
    
    1. 切片

      • l[1:3] # 从列表索引1到索引3(不包含索引3)进行截取, 如 l = [1, 2, 3, 4, 5], l[1:3]为[2, 3]
      • l[:5:2] # 第一个表示开始索引(留空0), 第二个表示结束索引(留空为最后一个,即-1), 第三个是步长, 即从开头到第5个(不包含第5个),跳一个取一个
      • 案例: 字符串反转 s="abcdefg";r=s[::-1]
    2. 遍历

      • 按元素遍历: for item in l: print(item)
      • 按索引遍历: for index in range(len(l)): print(l[index])
      • 按枚举遍历: for i,v in enumerate(l): print((i,v))
    3. 扩展/连接(添加多个元素): extend()/+ "abc"+"123";[1,2,3]+[4,5];[1,2,3].extend([4,5,6,7])

    4. 类型互转: str()/list()/tuple()

    list转str一般用join(), str转list一般用split()

    1. 系统函数
    • len(): 计算长度
    • max()/min(): 求最大/最小元素
    • sorted()/reversed(): 排序/反转并生成新序列(sort()/reverse()直接操作原序列)l_new=sorted(l);l_new2=reversed(l)

    集合 set

    1. 集合可以通过序列生成a = set([1,2,3])
    2. 集合无序,元素不重复(所有元素为可哈希元素)
    3. 集合分为可变集合set和不可变集合frozenset
    4. 操作方法: 联合|,交集&,差集-,对称差分^
    5. 系统函数: add()/update()/remove()/discard()/pop()/clear()
    6. 案例1: 列表去重: l=[1,2,3,1,4,3,2,5,6,2];l=list(set(l)) (由于集合无序,无法保持原有顺序)
    7. 案例2: 100w条数据,用列表和集合哪个性能更好? - 集合性能要远远优于列表, 集合是基于哈希的, 无论有多少元素,查找元素永远只需要一步操作, 而列表长度多次就可能需要操作多少次(比如元素在列表最后一个位置)

    字典 dict

    1. 字典是由若干key-value对组成, Python3.6后字典是有序的, 字典的key不能重复,而且必须是可哈希的,通常是字符串
    2. 字典操作
    • 赋值: d = {"a":1, "b":2}
    • 获取: a = d['a']a = d.get("a") # d中不存在"a"元素时不会报错
    • 增: d["c"] = 3; d.update({"d":5, "e": 6}
    • 删: d.pop("d");d.clear() # 清空
    • 查: d.has_key("c")
    • 遍历:
      • 遍历key: for key in d:for key in d.keys():
      • 遍历value: for value in d.values():
      • 遍历key-value对: for item in d.items():
    1. 案例: 更新接口参数 api = {"url": "/api/user/login": data: {"username": "张三", "password": "123456"}},将username修改为"李四"
      api['data']['username'] = "李四"api['data'].update({"username": "李四"})

    哈希与可哈希元素

    1. 哈希是通过计算得到元素的存储地址(映射), 这就要求不同长度的元素都能计算出地址,相同元素每次计算出的地址都一样, 不同元素计算的地址必须唯一, 基于哈希的查找永远只需要一步操作, 计算一下得到元素相应的地址, 不需要向序列那样遍历, 所以性能较好
    2. 可哈希元素: 为了保证每次计算出的地址相同, 要求元素长度是固定的, 如数字/字符串/只包含数字,字符串的元组, 这些都是可哈希元素

    6种类型简单的特点总结

    不可变类型:数字/字符串/元祖、frozen set
    可变类型:列表、集合、字典

    有序类型:序列(字符串/列表/元祖)及字典(Python3.6后默认按键值插入顺序有序)
    无需类型:集合

  • 相关阅读:
    C#---将数据库数据转换为json格式
    ASP.NET ---根据值让树中某一节点选中
    SQL---查询树中某个节点及其所有子节点
    CSS---相对定位笔记
    CSS---绝对定位笔记
    滑雪
    Self Numbers
    Lotto
    Parencodings
    Robot Motion
  • 原文地址:https://www.cnblogs.com/superhin/p/12746010.html
Copyright © 2011-2022 走看看