Python-数据结构(一)

一、数字

整数

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。

浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

常用方法:

  • int 将字符串转化为数字
	--------------------------------------------------------------------
	注:如果你对python感兴趣,我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:895817687
	--------------------------------------------------------------------

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    a = '123'
    print(type(a), a)
    a = int(a)
    print(type(a), a)

 
#输出
<class 'str'> 123
<class 'int'> 123

bit_length 当前数字的二进制至少用几位表示

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    age = 10
    r = age.bit_length()
    print(r)
     
    #输出
    4

二、字符串

1. 常用方法

  • capitalize 把字符串的第一个字符大写
        mystr.capitalize()
  • casefold lower 转换 mystr 中所有大写字符为小写 casefold可以识别特殊字符
        mystr.lower()
  • upper 转换 mystr 中的小写字母为大写
        mystr.upper()
  • swapcase 大小写切换
        mystr.swapcase()
    test = 'sFHVahKHJss'
    v = test.swapcase()
    print(v)
     
    #输出
    SfhvAHkhjSS
  • center 返回一个原字符串居中,并使用fillchar填充至长度 width 的新字符串
        mystr.center(width, fillchar=” ”)
  • count 返回str在start和end之间 在 mystr里面出现的次数
        mystr.count(str, start=0, end=len(mystr))
  • endswith 检查字符串是否以obj结束,如果是返回True,否则返回 False.
        mystr.endswith(obj)
  • startswith 检查字符串是否是以 obj 开头, 是则返回 True,否则返回 False
        mystr.startswith(obj)
  • find 检测str是否包含在 mystr中,如果包含返回开始的索引值,否则返回-1
        mystr.find(str, start=0, end=len(mystr))
  • index 跟find()方法一样,只不过如果str不在 mystr中会报一个异常
        mystr.index(str, start=0, end=len(mystr))

format 字符串格式化

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    test = 'my name is {name},age is {age}'
    print(test)
    mstr = test.format(name='Tom', age=15)
    print(mstr)
     
    #输出
    my name is {name},age is {age}
    my name is Tom,age is 15
    # format的三种玩法
    res1 = '{} {} {}'.format('egon', 18, 'male')
    res2 = '{1} {0} {1}'.format('egon', 18, 'male')
    res3 = '{name} {age} {sex}'.format(sex='male', name='egon', age=18)
    print(res1)
    print(res2)
    print(res3)
     
    #输出
    egon 18 male
    18 egon 18
    egon 18 male

format_map 类似于format,但传入的参数是一个字典

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    test = 'my name is {name},age is {age}'
    print(test)
    mstr = test.format_map({"name":"Tom", "age":"15"})
    print(mstr)
     
    #输出
    my name is {name},age is {age}
    my name is Tom,age is 15
    replace    把 mystr 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次
        mystr.replace(str1, str2,  mystr.count(str1))
    name = 'alex say :i have one tesla,my name is alex'
    print(name.replace('alex', 'SB', 1))
     
    #输出
    SB say :i have one tesla,my name is alex

split 以 str 为分隔符切片 mystr,如果 maxsplit有指定值,则仅分隔 maxsplit 个子字符串
    mystr.split(str=" ", maxsplit)

    name = 'root:x:0:0::/root:/bin/bash'
    print(name.split(':'))  # 默认分隔符为空格
    name = 'C:/a/b/c/d.txt'  # 只想拿到顶级目录
    print(name.split('/', 1))
     
    #输出
    ['root', 'x', '0', '0', '', '/root', '/bin/bash']
    ['C:', 'a/b/c/d.txt']
  • rsplit 类似split,但从右边开始
  • title 把字符串的每个单词首字母大写
        mystr.title()
  • ljust 返回一个原字符串左对齐,并使用fillchar填充至长度 width 的新字符串
        mystr.ljust(width, fillchar=” ”)
  • rjust 返回一个原字符串右对齐,并使用fillchar填充至长度 width 的新字符串
        mystr.rjust(width, fillchar=” ”)
  • zfill 返回指定长度的字符串,原字符串右对齐,前面填充0
        mystr.zfill(width)
  • lstrip 删除 mystr 左边的空白字符 也可以去除指定的字符
        mystr.lstrip()
    #!/usr/bin/env python
    # -*- encoding:utf-8 -*-
    test = 'asdfghh'
    v = test.lstrip('8assdf') # 消除所有匹配到的字符
    print(v)
     
    #输出
    ghh
  • rstrip 删除 mystr 右边的空白字符 也可以去除指定的字符
        mystr.rstrip()
  • strip 删除mystr字符串两端的空白字符 也可以去除指定的字符
        mystr.strip()
  • rfind 类似于 find()函数,不过是从右边开始查找
        mystr.rfind(str, start=0,end=len(mystr) )
  • rindex 类似于 index(),不过是从右边开始.
        mystr.rindex( str, start=0,end=len(mystr))
  • partition 把mystr以str分割成三部分,str前,str和str后
        mystr.partition(str)
    test = 'ahjsyklsuiyska'
    v = test.partition('s')
    print(v)
     
    #输出
    ('ahj', 's', 'yklsuiyska')
  • rpartition 类似于 partition()函数,不过是从右边开始.
        mystr.rpartition(str)
  • splitlines 按照行分隔,返回一个包含各行作为元素的列表
        mystr.splitlines()
    test = 'ahjsykls\nuiyska\nvjshgk\ndhvgks'
    v1 = test.splitlines(True)
    print(v1)
    v2 = test.splitlines(False)
    print(v2)
     
    #输出
    ['ahjsykls\n', 'uiyska\n', 'vjshgk\n', 'dhvgks']
    ['ahjsykls', 'uiyska', 'vjshgk', 'dhvgks']
  • isupper 判断字符串否全是大写字母
        mystr.isupper()
  • islower 判断字符串否全是小写字母
        mystr.islower()
  • isalpha 如果 mystr 所有字符都是字母 则返回 True,否则返回 False
        mystr.isalpha()
  • isdigit isdecimal isnumeric 如果 mystr 只包含数字则返回 True 否则返回
    False。isdigit可以判断一些特殊字符例如②。 isnumeric可以判断中文数字例如二。
        mystr.isdigit()
    #!/usr/bin/env python
    # -*- encoding:utf-8 -*-
    test = '②'
    v1 = test.isdecimal()
    v2 = test.isdigit()
    print(v1, v2)
     
    #输出
    False True
    test = '二'
    v1 = test.isdecimal()
    v2 = test.isdigit()
    v3 = test.isnumeric()
    print(v1, v2, v3)
     
    #输出
    False False True
  • isalnum 如果 mystr 所有字符都是字母或数字则返回 True,否则返回 False
        mystr.isalnum()
  • isspace 如果 mystr 中只包含空格,则返回 True,否则返回 False
        mystr.isspace()
  • istitle 如果字符串的每个单词的首字母都是大写,则返回True,否则返回False
        mystr.istitle()
  • isprintable 判断字符串是否能够被打印
        mystr.isprintable()
    test = '\n'
    v = test.isprintable()
    print(v)
     
    #输出
    False
  • join 将字符串、元组、列表中的元素以mystr连接生成一个新的字符串
        mystr.join(str)
    mystr = ' '
    print(mystr.join(["haha", "hehe", "heihei"]))
    mystr = '-'
    print(mystr.join(["haha", "hehe", "heihei"]))
    # 运行结果:
	haha hehe heihei
	haha-hehe-heihei
  • expandtabs 方法把字符串中的 tab 符号(’\t’)转为空格,tab 符号(’\t’)默认的空格数是
    8。从头开始数,数到第一个\t正好为8个空格,不足则补空格,如果还有\t,接着从第一个\t数到第二个\t仍然为8个空格,以此类推直到最后一个\t结束。
        S.expandtabs([tabsize=8])
    #!/usr/bin/python3
      
    S = "this is\tstring example....wow!!!"
    print ("原始字符串: " + S)
    print ("替换 \\t 符号: " +  S.expandtabs())
    print ("使用16个空格替换 \\t 符号: " +  S.expandtabs(16))
    """
    以上实例输出结果如下:
    原始字符串: this is     string example....wow!!!
    替换 \t 符号: this is string example....wow!!!
    使用16个空格替换 \t 符号: this is         string example....wow!!!
    """
    #!/usr/bin/env python
    #-*- encoding:utf-8 -*-
     
    S = "username\temail\tpassword\nlaiying\tying@q.com\t123\nlaiying\tying@q.com\t123\nlaiying\tying@q.com\t123"
    v = S.expandtabs(20)
    print(v)

在这里插入图片描述

translate 替换字符串中指定的字符

    test = 'ahjsykliuiyjka'
    m = str.maketrans('aeiou','12345')
    v = test.translate(m)
    print(v)
     
    #输出
    1hjsykl353yjk1

重点:

1、strip,lstrip,rstrip

2、lower,upper

3、startswith,endswith

4、format的三种玩法

5、split,rsplit

6、join

7、replace

8、isdigit

2. 下标切片
字符串中"下标"的使用

字符串实际上就是字符的数组,所以支持下标索引。

如果有字符串:name = ‘abcdef’,在内存中的实际存储如下:

如果想取出部分字符,那么可以通过下标的方法,(注意python中下标从 0 开始)

    name = 'abcdef'
    print(name[0])
    print(name[1])
    print(name[2])
     
    运行结果:
    a
    b
    c

切片

切片是指对操作的对象截取其中一部分的操作。

切片的语法:变量名[起始:结束:步长]

注意:选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束(包含起始位本身但不包含结束位本身)。结束位可以不写,那么默认按照步长一直到末尾。

如果取出一部分,则可以在中括号[]中

    示例1:
    name = 'abcdef'
    print(name[0:3])  # 取下标0~2 的字符
    运行结果:
    abc
     
    示例2:
    name = 'abcdef'
    print(name[2:])  # 取下标为2开始到最后的字符
    运行结果:
    cdef
     
    示例3:
    name = 'abcdef'
    print(name[len(name)-1])  # 取下标为字符长度-1的字符
    print(name[-1])  # 取下标为倒数第一个的字符
    运行结果:
    f
    f
     
    示例4:
    name = 'abcdef'
    print(name[1:-1])  # 取第2个到倒数第2个字符切片
    print(name[0::2])  # 从第一个字符开始每次步长为2取切片
    运行结果:
    bcde
    ace
     
    示例5:
    name = 'abcdef'
    print(name[-1:-5:-1])  # 逆向取倒数第一个到倒数第4个字符切片
    print(name[-1::-1])  # 逆向取倒数第一个到末尾的字符切片
    print(name[::-1])  # 倒序字符的切片
    运行结果:
    fedc
    fedcba
    fedcba
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值