Python基本数据类型与方法


补充:

# 对于数字而言,没有太多要说的
# 1、在python中没有单精度、双精度之分,float所支持的即为其他语言的双精度
# 2、在python3中:
# 		/ 为除法,结果自动转型为浮点型
#		// 为整除,如果被除数或者除数至少有一个为float类型,那么结果也为float类型	

print(1 / 3)	# 0.3333333333333333
print(1 // 3)	# 0
print(1 // 3.0) # 0.0

# 3、复数(complex)类型
# 表示复数的语法:real + image j
#   实数部分和虚数部分都是浮点数
#   虚数部分必须有后缀j或J

a = 5 + 4j
b = 5 - 4j
print(type(a))  # <class 'complex'>
print(a * b)	# (41+0j)

# 4、常用的一些内置方法
#	abs():绝对值
#	pow():指数幂
#	divmod():求商和余数
#   ......

一、列表(元组)

  1. 特点

    • 列表可以修改(即为可变数据类型)
    • 元组不可以修改(即为不可变数据类型)
    • 列表以方括号 [] 表示,元组以括号 () 表示(需要注意的是,当元组只有一个元素时,末尾一定要有一个逗号 , 来表示是元组而不是表达式
    • 可以存储任何类型的值(对象),这意味着可以嵌套
  2. 方法(注:以下为列表的方法,元组只有index和count方法,其他方法没有)

    方法参数返回值说明
    append(object)object:要添加的对象None把object作为一个整体添加进列表末尾,object可以是任意一个对象
    clear()None清空列表
    copy()list浅拷贝列表,并返回这个浅拷贝的列表
    count(value)value:要查找的值int返回在列表中value出现的次数(没有出现则返回0)
    extend(iterable)iterable:要添加进列表的可迭代对象None扩展列表,把iterable遍历一个个添加到列表末尾(与append不同,append是作为一个整体,而extend是遍历每个添加进去)
    index(value, start=None, stop=None)value:要查找的值
    start:要查找的开始索引(默认为0,也就是从第一个开始)
    stop:要查找的结束索引(默认为列表最后一个元素的索引)
    int返回列表第一次出现value对应的索引(如果value不在列表中,则会报错)
    insert(index, object)index:要插入到列表的索引位置
    object:要插入的对象
    None把对象插入到列表的指定索引位置
    pop(index=None)index:要删除值所在的索引位置(默认删除列表最后一个)Any删除列表中对应索引位置的值,并返回这个值(如果列表为空,或者超出列表的最大索引,则会报错)
    remove(value)value:要删除的值None删除列表里第一个为指定值的元素(不存在时则会报错)
    reverse()None翻转列表(就地翻转,不会返回一个新的列表,如果要想返回新的列表,请使用python的reversed内置函数)
    sort(key=None, reverse=None)key:根据什么排序(默认就是ascii值大小排序)
    reverse:是否翻转列表(默认不翻转)
    None排序列表(就地排序,不会返回一个新的列表,如果要想返回新的列表,请使用python的sorted内置函数)
  3. 示例

    # 1. append
    li = [1,2,3]
    li.append("sb")
    li.append([5,6])    # 会把对象作为一个整体添加到列表里
    print(li)
    # 输出:[1, 2, 3, 'sb', [5, 6]]
    
    # 2. clear
    li.clear()
    print(li)
    # 输出:[]
    
    # 3. copy
    li = [1,2,3, ['a', 'b']]
    copy_li = li.copy()
    # 对应数字、字符串、和其他“原子”类型的对象,没有涉及深、浅拷贝这么一说(因为一旦创建,不可修改)
    # 容器类型才涉及深、浅拷贝
    copy_li[0] = 8	# 所以修改这个,原列表不会跟着修改
    copy_li[3][0] = 'hahaha'  # 由于浅拷贝,只是引用了原来对象的地址,所以原列表也会跟着变化
    print(copy_li)
    print(li)
    # 输出:[8, 2, 3, ['hahaha', 'b']]
    #      [1, 2, 3, ['hahaha', 'b']]
    
    # 可以看到:以下两个值不一样,说明内存地址不一样
    print(id(copy_li[0]))  
    print(id(li[0]))
    # 可以看到,以下两个值是一样的,说明内存地址一样,所以这就是浅拷贝
    print(id(copy_li[3]))
    print(id(li[3]))
    
    # 4. count
    li = [1,2,2,3,2]
    print(li.count(2))
    # 输出:3
    
    # 5. extend
    li = [1]
    li.extend([4,"sb",(1,2)])  # 把可迭代对象每个元素遍历添加,而不是作为一个整体添加
    print(li)
    # 输出:[1, 4, 'sb', (1, 2)]
    
    # 6. index
    li = ["weg","jhytj","happy", "meij", "ioqjwofn", "happy"]
    print(li.index("happy"))  # 返回第一次出现的索引
    # 输出:2
    
    # 7. insert
    li = [1,2,3,4]
    li.insert(2,"sb")
    print(li)
    # 输出:[1, 2, 'sb', 3, 4]
    
    # 8. pop
    li = [1,2,3,4,5]
    x = li.pop()    # 不指定,则删除最后一个
    y = li.pop(1)   # 删除指定索引的
    print(x)
    print(y)
    # 输出:5
    #	   2	
    
    # 9. remove
    li = [1,2,3,4,3,5]
    li.remove(3)    # 只删除第一个3
    print(li)
    # 输出:[1, 2, 4, 3, 5]
    
    # 10. reverse
    li = [1,2,3,4,5]
    li.reverse()
    print(li)
    # 输出:[5, 4, 3, 2, 1]
    
    # 11. sort
    li = [1,3,4,2,5]
    li.sort()  # 默认从小到大排序
    print(li)
    # 输出:[1, 2, 3, 4, 5]
    
    #   另外:sort还接受两个可选参数:key和reverse
    li = ['abere','zed','haha','mrtcsefgsdfs','zaf']
    li.sort()  # 字符串则是根据ASCII值大小进行比较(逐个字母比较,如果相同则比较下一位)
    print(li)
    # 输出:['abere', 'haha', 'mrtcsefgsdfs', 'zaf', 'zed']
    
    li.sort(key=len)    # 根据长度排序(如果长度相同,则还是按照ASCII值大小进行比较)
    print(li)
    # 输出:['zaf', 'zed', 'haha', 'abere', 'mrtcsefgsdfs']
    
    li.sort(reverse=True)   # 相当于li.sort()之后再li.reverse()
    print(li)
    # 输出:['zed', 'zaf', 'mrtcsefgsdfs', 'haha', 'abere']
    

二、字符串

  1. 特点

    • 一旦创建不可修改(我们平时所见的修改,比如调用方法,都是返回新的字符串,而不是就地修改原字符串
    • 可以用单引号 '' 、双引号 "" 和三引号''' '''或""" """来表示(一般尽量使用双引号,因为经常要进行json交互,而json就需要使用标准的双引号,可以减少很多不必要的麻烦
  2. 方法

    方法参数返回值说明
    index(sub, start=None, end=None)sub:要查找的子串
    start:要查找的起始索引,默认为0
    end:要查找的结束索引(不包含),默认为字符串长度-1
    int从左往右查)返回第一次出现子串的第一个字符的索引,找不到则会报错
    rindex(sub, start=None, end=None)sub:要查找的子串
    start:要查找的起始索引,默认为0
    end:要查找的结束索引(不包含),默认为字符串长度-1
    int从右往左查)返回第一次出现子串的第一个字符的索引,找不到则会报错
    find(sub, start=None, end=None)sub:要查找的子串
    start:要查找的起始索引,默认为0
    end:要查找的结束索引(不包含),默认为字符串长度-1
    int从左往右查)返回第一次出现子串的第一个字符的索引,找不到则会返回-1(注意:-1不代表是最后一个,如果要查找的子串(单个字符)是最后一个,则应该为str.length - 1)
    rfind(sub, start=None, end=None)sub:要查找的子串
    start:要查找的起始索引,默认为0
    end:要查找的结束索引(不包含),默认为字符串长度-1
    int从右往左查)返回第一次出现子串的第一个字符的索引,找不到则会返回-1(注意:-1不代表是最后一个,如果要查找的子串(单个字符)是最后一个,则应该为str.length - 1)
    count(sub, start=None, end=None)sub:要查找的子串
    start:要查找的起始索引,默认为0
    end:要查找的结束索引(不包含),默认为字符串长度-1
    int返回子串出现的次数(没有出现则返回0)
    strip(chars=None)chars:需要移除哪些字符(不指定则默认移除空格和换行符;如果指定了,则会移除chars里面指定的每个字符,如’#!r’,则会移除‘#’,’!‘和’r’)str移除字符串左右两侧指定的字符,并返回移除指定字符后的字符串(注意:不会移除中间的)
    lstrip(chars=None)chars:需要移除哪些字符(不指定则默认移除空格和换行符;如果指定了,则会移除chars里面指定的每个字符,如’#!r’,则会移除‘#’,’!‘和’r’)str移除字符串左边指定的字符,并返回移除指定字符后的字符串(注意:不会移除中间的)
    rstrip(chars=None)chars:需要移除哪些字符(不指定则默认移除空格和换行符;如果指定了,则会移除chars里面指定的每个字符,如’#!r’,则会移除‘#’,’!‘和’r’)str移除字符串右边指定的字符,并返回移除指定字符后的字符串(注意:不会移除中间的)
    split(sep=None, maxsplit=-1)sep:要通过什么分隔字符(串)来进行分隔(不指定,则默认以单个或多个连续的空白字符(空格、制表符、换行符等)作为分隔符)
    maxsplit:最大分隔次数(默认为分隔所有;如果指定了次数,则从左到右,只分隔指定的次数)
    list通过分隔符(串)按从左到右的顺序对字符串进行切割,并返回一个列表
    format(*args, **kwargs)args:位置参数
    kwargs:关键字参数
    str返回格式化(替换包含{}的)后的字符串(可以通过顺序、索引、关键字来指定替换方式,详细使用请看示例)
    join(iterable)iterable:可迭代对象(注:序列的元素必须都要是字符串,否则会报错)str将序列的元素以字符串本身(即谁调用)为指定字符进行拼接,然后返回这个拼接后的字符串
    replace(old, new, count=None)old:要被替换的子串
    new:想要替换成的子串
    count:替换次数(默认为替换全部;如果指定,则只会从左到右替换count个)
    str以新的子串替换旧的子串(如果旧的子串不存在则会报错),并返回替换后的字符串
    lower()str返回全部大写字符转成小写的字符串(只对ASCII编码,也就是‘A-Z’有效)
    upper()str返回全部小写字符转成大写的字符串
    encode(encoding=‘utf-8’, errors=‘strict’)encoding:编码方式(默认为utf-8)
    errors:编码错误处理方案(默认为’strict’,即抛出异常;还有’ignore’,'replace’等值可选)
    bytes返回字符串以指定编码方式编码后的二进制(对应的二进制可以用decode进行解码)
    center(width, fillchar=None)width:填充长度
    fillchar:要填充的字符(默认为空格,并且只能为一个字符,为多个字符时会报错)
    str返回以填充字符填充,居中的字符串(如果填充长度小于等于字符串本身长度,则不会显示填充字符)
    capitalize()str返回首字符大写,其他字符小写的字符串
    casefold()str返回全部大写字符转成小写的字符串(比lower()更高级,可以对其他语言的大写转换成小写)
    title()str返回所有单词首字母大写,其他字母小写的字符串
    startswith(prefix, start=None, end=None)prefix:以什么子串作为开头
    start:开始检查的索引(默认为0)
    end:结束检查的索引(默认为字符串长度-1;同样,这里也是不包含这个索引位置,即常见的左闭右开区间)
    bool检查字符串是否以指定的子串作为开头,返回布尔值
    endswith(suffix, start=None, end=None)suffix:以什么子串作为结尾
    start:开始检查的索引(默认为0)
    end:结束检查的索引(默认为字符串长度-1;同样,这里也是不包含这个索引位置,即常见的左闭右开区间)
    bool检查字符串是否以指定的子串作为结尾,返回布尔值
    zfill(width)width:需要填充0的长度str返回往字符串左边补0(直至字符串长度达到填充长度;如果填充长度≤字符串长度,则不进行填充)的字符串
    isdecimal()bool检查字符串是不是只包含数字(只能识别123这种),返回布尔值
    isdigit()bool检查字符串是不是只包含数字(除了123,还可以识别①②③这种),返回布尔值
    isnumeric()bool检查字符串是不是只包含数字(除了123、①②③,还可以识别中文的数字,如一、壹等),返回布尔值
    isalpha()bool检查字符串是不是只包含字母,返回布尔值
    isalnum()bool检查字符串是不是只包含字母数字(这里的数字指isnumeric(),也就是说中文等的数字也是可以的),返回布尔值
    islower()bool检查字符串是不是所有字符都为小写,返回布尔值
    isupper()bool检查字符串是不是所有字符都为大写,返回布尔值
    isspace()bool检查字符串是不是只包含空格(可以是空格,\n\t等空白字符),返回布尔值
    isidentifier()bool检查字符串是不是有效的标识符(如果字符串仅包含字母数字字母(a-z)和(0-9)或下划线(_),且不能以数字开头或包含任何空格),返回布尔值
    isprintable()bool检查字符串是不是可打印字符(通常用来检查转义字符,如\n \t这种就会返回False),返回布尔值
    istitle()bool检查字符串的所有单词是否以首字母大写,其余字母小写,返回布尔值

三、字典

  1. 特点

    • 无序(意味着不能通过索引、切片等方式访问)
    • 键值对形式存储,并且必须是不可变数据类型(数字、字符串、元组等),并且键是唯一的,值可以不唯一
    • 其本身是可变数据类型,而且也可以支持嵌套
    • 字典以花括号 {} 表示,里面的元素用 键: 值 来表示
  2. 方法

    方法参数返回值说明
    items()iterable通常使用for key, value in x.items()的方式来进行解包,可以遍历字典的所有项(键值对);也可以使用list()来把x.items()转换成列表,里面每个元素是一个元组(第一个元素是键,第二个元素是值)
    keys()iterable通常使用for key in x.keys()的方式来进行遍历,可以遍历字典的所有键;也可以使用list()来把x.keys()转换成列表,里面每个元素就是每个键
    values()iterable通常使用for value in x.values()的方式来进行遍历,可以遍历字典的所有值;也可以使用list()来把x.values()转换成列表,里面每个元素就是每个键对应的值(注意:由于值不唯一,所以有可能有重复的
    get(key, default=None)key:要获取字典中的哪个键的值
    default:当找不到对应键时返回的值(如果不指定,默认返回None)
    Any返回字典中对应键的值,如果不存在,则返回指定的默认值(没有指定则默认返回None)(效果等同于x[key],只不过x[key]当key不存在时会报错,所以推荐使用get方法
    copy()dict浅拷贝字典,并返回这个浅拷贝的字典
    clear()None就地清空字典,返回None
    update(dict=None, *args, **kwargs)dict:需要添加的字典
    *args:传入一个元组或列表(里面每个元素是一个元组,第一个值为键,第二个值为键对应的值)
    **kwargs:以关键字的方式添加键值对
    None更新字典的键值对(如果原来没有对应的键,则新增;否则会覆盖原有键的值
    使用方式:
    1、update({“key”: “value”}),这种就是直接传入一个字典
    2、update([(“k1”, “v1”), (“k2”, “v2”), …]),这种就是传入一个列表或者元组,里面每个元素是一个元组(元组第一个值为键,第二个值为键对应的值)
    3、update(k1=v1, k2=v2, …),这种就是通过关键字参数的方式添加键值对(注意:这种k1,k2最后只会是字符串,不能是别的,而且不要加上""引号,因为是当做关键字参数,v1,v2则可以是任意值)
    4、update(**some_dict),和第3种方式类似,不一样的写法,不过也是和第3种一样,键只能是字符串,如果为其他是会报错的)
    setdefault(key, default=None)key:要设置到字典中的键
    default:key对应的值(如果不指定,默认返回None)
    Any1、如果该键在字典中存在,则不进行更新(覆盖),并返回原有字典中该键的值
    2、如果该键在字典中不存在(或者本身是个空字典),则添加进字典,并返回添加的值(也即参数default的值)
    注意:不管存不存在,这个方法都有返回值
    pop(key, default=None)key:要删除字典中的键
    default:如果字典中本身不存在该键,则返回指定的值(该参数可以不传)
    Any1、如果该键在字典中存在,则删除字典中对应的键值对,并且返回原来字典中这个键所对应的值
    2、如果该键在字典中不存在(或者本身是个空字典),并且没有指定参数default的值,则会抛出KeyError的异常(而不是返回None);如果指定参数default的值,则不会报错,并且返回这种default的值
    注意:key是必填参数,和列表不一样,因为字典本身无序,pop()不指定参数不会弹出最后一个元素,所以必须指定key
    popitem()Any删除字典中最后一个项(键值对),并且以元组的方式返回对应的键和值,即 (key, value) 的形式
    如果本身是个空字典,则抛出KeyError异常
    fromkeys(seq, value=None)seq:序列,可以是字符串、元组、列表,会遍历每个值作为键(字符串的话,就相当于把每个字符作为键)
    value:所有键对应的值(不指定默认为None)
    dict创建一个新字典
    注意:所有键的值都是一样的,都为参数value对应的值;另外,这个方法是创建一个新字典,不会在原有字典进行更新,记得拿一个变量来接收保存下来

四、集合

  1. 特点

    • 无序(意味着不能通过索引、切片等方式访问)
    • 元素不能重复(自动去重)
    • 集合以花括号 {} 来表示,里面每个元素用逗号 , 分隔开(注意:如果要创建空集合,使用内置的 set() 函数来创建,因为 {} 表示的是空字典
    • 对于 set() 来说,是可变数据类型;对于 frozenset() 来说,是不可变数据类型
    • 集合不能存储任意值,它只能存储可hash对象(不可变数据数据:数字、字符串、元组等),意味着集合不能嵌套集合,但它可以以 frozenset() 作为元素
  2. 方法

    方法参数返回值说明
    add(element)element:需要添加进集合的值(必须是可hash对象)None类似list的append方法,把element作为一个整体添加到集合
    如果添加的元素是不可hash对象(即为字典、列表、集合set()等),会抛出TypeError异常
    update(s: iterable)s:可迭代对象,列表、元组等None类似list的extend方法,一个个遍历添加到集合
    注意:参数可以传list,但是其里面的每个元素还是要满足可hash这个条件,否则依然会抛出TypeError异常,因为这个方法本质就是通过for循环来进行add()
    remove(element)element:需要从集合删除值(必须是可hash对象)None把element从集合中删除
    1、如果element本身是不可hash对象,会先抛出TypeError异常
    2、如果element本身不在集合中,会抛出KeyError异常
    discard(element)element:需要从集合删除值None把element从集合中删除
    1、如果element本身是不可hash对象,会先抛出TypeError异常==(但是传入的是集合的话,就不会抛出这个TypeError异常,没搞懂这个玩意)==
    2、如果element本身不在集合中,不会做任何事情,也不会抛出异常(所以比起remove(),更推荐使用这个)
    pop()Any从集合中随机删除一个值,并返回这个值
    如果集合为空,则会抛出KeyError异常
    clear()None清空集合中所有的元素
    copy()set浅拷贝集合,并返回这个浅拷贝的集合
    issubset(s: iterable)s:可迭代对象,一般传的是集合(也可以传列表等)bool判断当前集合是不是参数可迭代对象的子集,返回布尔值
    假设a和b都是集合,可以写成 a <= b(表示a是不是b的子集)
    issuperset(s: iterable)s:可迭代对象,一般传的是集合(也可以传列表等)bool判断当前集合是不是参数可迭代对象的超集(父集),返回布尔值
    假设a和b都是集合,可以写成 a >= b(表示a是不是b的超集)
    difference(*s: iterable)s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值set返回当前集合与参数所有的可迭代对象(即参数可以传入多个集合、列表等)的差集(自己有,别人没有)
    假设a和b都是集合,可以写成 a - b(表示a和b的差集,以a为主)
    difference_update(*s: iterable)s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值None与 difference() 类似,不过这个方法不会返回一个新的集合,会就地修改,只保留差集中所有的元素
    intersection(*s: iterable)s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值set返回当前集合与参数所有的可迭代对象(即参数可以传入多个集合、列表等)的交集(自己和别人都有的)
    假设a和b都是集合,可以写成 a & b(表示a和b的交集)
    intersection_update(*s: iterable)s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值None与 intersection() 类似,不过这个方法不会返回一个新的集合,会就地修改,只保留交集中所有的元素
    union(*s: iterable)s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值set返回当前集合与参数所有的可迭代对象(即参数可以传入多个集合、列表等)的并集(包含每个集合所有的元素,但交集只出现一次,因为集合会自动去重)
    假设a和b都是集合,可以写成 a | b(表示a和b的并集)
    symmetric_difference(*s: iterable)s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值set返回当前集合与参数所有的可迭代对象(即参数可以传入多个集合、列表等)的对称差集(反交集,除了自己和别人都有的其他所有元素)
    假设a和b都是集合,可以写成 a ^ b(表示a和b的对称交集(反交集),也即两个集合的并集 减去 两个集合的交集)
    symmetric_difference_update(*s: iterable)s:可迭代对象,一般传的是集合(也可以传列表等),由于参数带*,可以传入多个值None与 symmetric_difference() 类似,不过这个方法不会返回一个新的集合,会就地修改,只保留对称差集(反交集,除了自己和别人都有的其他所有元素)
    isdisjoint(s: iterable)s:可迭代对象,列表、元组等bool判断两个集合是否存在交集,如果不存在则返回True,否则返回False
    (Return True if two sets have a null intersection.)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值