一周学python系列(3)——数据序列

首先不好意思,停更了五天(虽然感觉也没什么人看),只是想分享一下自己真实学习中做的笔记。在学习之前本来自己计划一个星期学完基础python,但前几天由于有事,延误了几天。我是学习上总喜欢规定好时间,然后天时地利人和占全,才想着开始学习,期间如果遇到一些事情,便会耽误学习,想着明天吧,明天找个好时机再学。这是一个陋习,也希望大家引以为戒,学习没有借口,在碎片化时代下的我们,更应该学会在细碎的时间内好好学习!之后仍会保持原先计划,七天学完python,我也会保持更新,希望大家一起努力!

数据序列

字符串(string)

字符串是python中最常用的数据类型。一般使用引号创建字符串。

字符串特征
  • 一对引号字符串(可以是单引号,也可以是双引号)

    name1 = 'Tom'
    name2 = "Tom"
    
  • 三引号字符串(作用在于可以跨行,支持换行回车)

    name3 = '''Tom'''
    name4 = """Tom"""
    a = ''' I am Tom,
    				nice to meet you!'''
    a = """I am Tom,
    				nice to meet you!"""
    
  • # 三种方式:单引号、双引号、三引号
    
    a = 'TOM'
    
    b = "TOM"
    
    C = """I am Tom"""
    
    d = '''I am Tom'''
    
    f = '''I am
    Tom'''       # 三引号支持换行回车
    
    # I'm Tom
    g = "I'm Tom"    # 方式一:若字符串内容中有单引号,则使用双引号
    e = 'I\'m Tom'      # 方式二:使用转义字符
    # python中引入多种方式(多种引号)来创建字符串,目的便是解决字符串内容中出现引号,导致无法正常配对的情况
    
下标

下标又叫索引,下标的作用即是通过下标快速找到对应的数据,字符串中的字符是通过索引来提取的

索引从0开始,为正向索引顺序

python可以取负值,表示从末尾提取,最后一个为-1,为反向索引顺序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j05ZtX2t-1657120893189)(C:\Users\86132\AppData\Roaming\Typora\typora-user-images\image-20220705120040116.png)]

str = 'abcdef'
print(str)

# 通过索引可精确找到某个字符数据
# str[]

print(str[0])
# 结果为a
切片

切片是对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作

  1. 语法

    序列[开始位置下标:结束位置下标:步长]
    

    注意:

    不包含结束位置下标对应的数据,即左闭右开,正负整数均可

    步长是选取间隔,正负整数均可,负数表示倒叙选取,默认步长为1

    通常上边界不包括在提取字符串内,若没指定值,切片的边界默认为0和序列的长度

    选取方向,即索引开始到结束的方向,要求与步长的方向保持一致,负责无法选取,会显示空字符串

  2. 例子

    str = 'string'
    print(str[0:3])
    # 结果为st
    
    print(str[1:5])
    # 结果为trin
    
    print(str[:-1])
    # 结果为strin
    
    print(str[:])
    # 结果为string
    
    print(str[-3:-1])
    # 结果为in
    
    print(str[::-1])
    # 结果为gnirts
    
    print(str[::-2])
    # 结果为git
    
    print(str[1:5:2])
    # 结果为ti
    
    print(str[1:5:-1])
    # 结果为空字符串  如果选取方向,即索引开始到结束的方向和步长的方向冲突,则无法选取数据
    
    print(str[5:1:-1])
    # 结果为gnir
    
常用操作方法

字符串常用操作方法有查找、修改和判断三大类

  1. 字符串查找(find,index)

    方法名称功能
    find(str,[beg[,end]])检测某个子串是否包含在这个字符串中,如果在则返回这个子串第一次出现的索引位置,否则则返回-1。
    index(str,[beg[,end]])检测某个子串是否包含在这个字符串中,如果在则返回这个子串第一次出现的索引位置,否则则报异常
    rfind(str,[beg[,end]])rfind()和find()功能相同,但查找方向为右侧开始
    rindex(str,[beg[,end]])rindex()和index()功能相同,但查找方向为右侧开始

    其中,[]表示可选参数,且同切片一致为左闭右开

    # 查找
    # find()  index()
    str = 'hello python'
    # find()
    print(str.find('el'))   # 1
    print(str.find('el',1,2))   # -1
    
    # index()
    print(str.index('el',1,8))  # 1
    
  2. 字符串修改之合并与替换(join、replace)

    方法名称功能
    join(seq)以指定字符串作为分隔符,将seq中所有的元素(的字符串数据)合并为一个新的字符串
    replace(old,new[,max])把 字符串中的old 替换成 new,如果指定max,则替换不超过max次
    # 修改之合并与替换
    # join():合并  合并列表中的字符串数据组成一个大字符串
    list = ['aa','bb','cc']   # aa..bb..cc
    str2 = '..'.join(list)
    print(str2)   # 结果为aa..bb..cc
    
    # repla():替换
    str1 = 'hello python'
    print(str.replace('python','world'))
    print(str)   # 结果为hello world
    # 调用replace方法后,原字符串中的数据并未发生修改,修改后的数据只是replace函数的返回值
    # ---说明字符串为不可变数据类型
    # 数据根据是否可以改变划分为 可变类型 和 不可变类型
    
  3. 字符串修改之大小写轮转操作(upper、lower、swapcase、capitalize、title)

    方法名称功能
    upper将字符串中所有元素都转为大写
    lower将字符串中所有元素都转为小写
    swapcase交换大小写,即大写转为小写,小写转为大写
    capitalize第一个大写,其余小写
    title每个单词的第一个字符大写,其余小写
    # 字符串修改之大小写轮换操作
    str3 = 'my name is Tom'
    print(str3.upper())  # MY NAME IS TOM
    print(str3.lower())   # my name is tom
    print(str3.swapcase())  # MY NAME IS tOM
    print(str3.capitalize())  # My name is tom
    print(str3.title())   # My Name Is Tom
    
    '''
    结果为:
    MY NAME IS TOM
    my name is tom
    MY NAME IS tOM
    My name is tom
    My Name Is Tom
    '''
    
  4. 字符串修改之字符串对齐(center、just、zfill)

    方法名称功能
    center(width,fillchar)返回一个指定宽带width居中的字符串,fillchar为填充字符,默认为空格
    ljust(width[,fillchar])返回一个原字符串左对齐,并使用fillchar填充至长度width的新字符串,fillchar默认为空格
    rjust(width[,fillchar])返回一个原字符串右对齐,并使用fillchar填充至长度width的新字符串,fillchar默认为空格
    zfill(width)返回长度为width的字符串,原字符串右对齐,前面填充0
    # 字符串修改之对齐
    str4 = 'hello python'
    print(str4.center(30,'-'))
    print(str4.ljust(30,'-'))
    print(str4.rjust(30,'-'))
    print(str4.zfill(30))
    
    '''
    结果为:
    ---------hello python---------
    hello python------------------
    ------------------hello python
    000000000000000000hello python
    '''
    
  5. 字符串修改之分割字符串(split、splitlines、partition)

    方法名称功能
    split(seq=“”,num=string.count(str))以seq(默认为空格)为分隔符截取字符串,如果num有指定值,则仅截取num+1个子字符串(只需num个seq分隔符)。分割后得到一个新列表
    rsplit与split类似,但方向从右边开始分割
    splitlines按照行进行分割,得到新的列表
    partition(str)找到字符串第一个str,并以str为界,将字符串分割为3部分,返回一个新的元组
    rpartition(str)与partit类似,但方向从右边开始
    # 字符串修改之分割字符串
    str5 = 'hello world and hello python and hello you'
    print(str5.split('and',1))
    print(str5.split())   # 默认为空格
    print(str5.partition('and'))
    print(str5.rpartition('and'))
    
    str6 = '''hello world 
            and hello python and
            hello you'''
    print(str6.splitlines())
    
    '''
    结果为:
    ['hello world ', ' hello python and hello you']
    ['hello', 'world', 'and', 'hello', 'python', 'and', 'hello', 'you']
    ('hello world ', 'and', ' hello python and hello you')
    ('hello world and hello python ', 'and', ' hello you')
    ['hello world ', '        and hello python and', '        hello you']
    '''
    
  6. 字符串修改之去掉两端多余字符串(strip)

    方法名称功能
    lstrip(str)去掉左边的str字符,默认为空白字符
    rstrip(str)去掉右边的str字符
    strip(str)去掉两边的str字符
    # 字符串修改之去掉两端多于字符操作(strip)
    str = '    my name is tom     '
    print(str.strip())
    # 结果为my name is tom
    
  7. 字符串判断(isidentifier、isspace、isalpha、isdecimal、isnumeric、isalnum等)

    方法名称功能
    isidentifier判断字符串是不是合法标识符
    isspace判断字符是否只有空白字符(回车、换行和水平制表符)
    isalpha判断字符串是否全部由字母组成
    isdecimal判断字符是否由十进制的数字组成,不包括中文、罗马字符
    isdigit判断字符串只包含数字,不包括中文数字
    isnumeric判断字符串是否全部由数字组成,包括中文数字
    isalnum判断字符串是否由字母和数字组成
    islower判断字符串中的字符是否全部为小写,字符串至少有一个字符
    isupper判断字符串中的字符是否全部为大写,字符串至少有一个字符
    istitle判断字符串是否标题话
    isascii如果字符串为空或字符串中的所有字符都是ASCII,则返回Ture,否则返回False
    isprintalbe如果所有字符都是可打印的,则返回Ture,否则返回False
    # 字符串判断
    print('hello world'.isidentifier())   # False 空格为非法标识符
    print('    t'.isspace())   # False  t为非空
    print('aldfwdad'.isalpha())  # True
    print('1546四'.isdecimal())  # False 中文不属于十进制
    print('1546四'.isnumeric())   # True 包括中文数字
    print('1546四'.isalnum())  # True
    print('1546四'.isdigit())  #False 不能包括中文
    print(''.islower())  # False  不能为空字符串
    print('TUHHH'.isupper())   #True
    print('My Name Is Tom'.istitle())  # True 每个单词第一个字符大写,其余小写
    print('我是中国人'.isascii())    # False  中文不属于ASCII码
    print('hello\nAre you ?'.isprintable())   # False  \n 不可打印
    
    '''
    结果为:
    False
    False
    True
    False
    True
    True
    False
    False
    True
    True
    False
    False
    '''
    
  8. 字符串判断之判断开头结尾字符串(startswith,endswith)

    方法名称功能
    startswith()检查字符串是否以str开头,若是则返回Ture
    endswith()检查字符串是否以str结尾,若是则返回Ture
    # 判断开头结尾字符串
    str = 'my name is tom'
    print(str.startswith('my'))   # True
    print(str.endswith('is'))   # False
    
  9. 字符串计数(count,len)

    方法名称功能
    count(sub[,start=0[,end=len(string))]]在字符串[start,end]范围内,计算sub字符串的个数
    lenlen不是string的方法,是内置函数,计算字符串中的字符个数
    # 字符串计数
    str = 'my name is tom and your name is rock'
    print(str.count('name'))  # 2
    print(len(str))  # 36
    
  10. 字符串比较(max、min等)

    比较规则:从第一个依次往下比较(比较的是oridinal value(原始值))

    方法名称功能
    max(str)返回字符串str中最大的字母
    min(str)返回字符串str中最小的字母
    ord将指定字符转换为原始值
    chr将原始值转换为对应的字符
    # 字符串之比较
    str = 'mynameistom'
    print(f'max(str):{max(str)} min(str):{min(str)}')
    print(ord('c'))
    print(chr(99))
    
    '''
    结果为:
    max(str):y min(str):a
    99
    c
    '''
    

####列表(list)

格式
[数据1,数据2,数据3,数据4.....]
# 列表可以一次性存储多个数据,且可以为不同数据类型

列表可以一次性存储多个数据,且可以为不同数据类型

常用操作

+++++

列表的操作可分为增、删、改、查

  1. 列表同字符串类似,也可采用索引和切片方式取到相应数据

    以下三个方法或函数与字符串用法一致

    index()

    count()

    len()

    list = ['Tom','Lily','Rose']
    print(list[0])   # Tom
    print(list[0:2])    # ['Tom', 'Lily']
    print(list.index('Tom'))    # 0
    print(list.count('Tom'))    # 1
    print(len(list))    # 3
    
  2. 增加指定数据到列表中

    方法名称功能
    append(数据)在列表结尾增加数据,如果数据是一个序列,则将该序列作为一个整体添加到列表
    extend(数据)在列表结尾增加数据,如果数据是一个序列,则将序列的数据逐一添加到列表
    insert(索引位置,数据)指定位置新增数据
    list = ['Tom','Lily','Rose']
    # 增加  append()
    list.append('张三')
    print(list)  # ['Tom', 'Lily', 'Rose', '张三']
    list.append([11,22])
    print(list)   # ['Tom', 'Lily', 'Rose', '张三', [11, 22]]
    # 列表属于可变数据类型
    
    # extend()
    list.extend(['李四','王五'])
    print(list)   # ['Tom', 'Lily', 'Rose', '张三', [11, 22], '李四', '王五']
    
    # inser()
    list.insert(1,'小明')
    print(list)  # ['Tom', '小明', 'Lily', 'Rose', '张三', [11, 22], '李四', '王五']
    
  3. 方法名称功能
    del删除列表或指定数据
    pop()删除指定下标的数据(默认为最后一个),并返回该数据
    remove()移除列表中某个数据的第一个匹配项
    clear()清空列表
    list = ['Tom','Lily','Rose']
    # 删除 del
    del list[0]
    print(list)   # ['Lily', 'Rose']
    
    # pop()
    list.pop()
    print(list)   # ['Lily']
    
    # remove()
    list.remove('Lily')
    print(list)  # []
    
    list = ['Lily', 'Rose']
    list.clear()
    print(list)   # []
    
  4. 可直接修改指定下标的数据

    # 修改
    list = ['Tom', 'Lily', 'Rose', '张三']
    list[0] = '李四'
    print(list)   # ['李四', 'Lily', 'Rose', '张三']
    
    方法名称功能
    reverse()逆置
    sort(key = None, reverse=False)排序,其中revers表示排序规则,reverse=True 降序,reverse=False 升序(默认)
    # 修改
    # reverse()
    list1 = [1,5,8,9,7,10]
    list1.reverse()
    print(list1)   # [10, 7, 9, 8, 5, 1]
    # sort()
    list1.sort()
    print(list1)
    list1.sort(reverse=True)
    print(list1)    # [10, 9, 8, 7, 5, 1]
    
  5. 其他

    判断指定数据是否存在在某个列表序列中(innot in)

    # 判断是否存在
    list = ['Tom','Lily','Rose']
    print('Tom' in list)  # Ture
    print('Tom' not in list)   # False
    

    复制(copy())

    copy()

    # 复制 copy()
    list = ['李四', 'Lily', 'Rose', '张三']
    list2 = list.copy()
    print(list2)  # ['李四', 'Lily', 'Rose', '张三']
    
循环遍历
  1. while

    list = ['Tom','Lily','Rose']
    
    i = 0
    while i < len(list):
    	print(list[i])
    	i += 1
    
    
  2. for

    list = ['Tom','Lily','Rose']
    
    for i in list:
        print(i)
    

#####嵌套使用

列表嵌套指的是一个列表里面包含其他子列表

list = [[1,2,3],[4,5,6],[7,8,9]]

# 可看成一个二维数组  索引  第一个[]表示外层,第二个[]表示内层列表
print(list[0])   # [1,2,3]
print(list[0][0])   # [1]

# 遍历
for i in list:
    for j in i:
        print(j)
元组(tuple)

++++

元组tuple可存储多个数据,但一旦初始化后元组内的数据不能修改

# 多个数据元组
t1 = (10,20,30)

# 单个数据元组
t2 = (10,)

print(type(t2))   # tuple

t3 = (10)
print(type(t3))  # int

t4 = ('hello')
print(type(t4))  # str

# 空元组
t5 = ()   # ()

注意: 若定义的元组只有一个数据时,要在该数据后面添加一个逗号,因为括号()既可以表示tuple,又可表示数学公式中的小括号,这就会产生歧义,因此,python规定,这种情况下,按小括号计算,所以只有一个元素的tuple时,要加一个逗号,

元组的常用操作

元组数据不支持修改,只支持查找

  1. 按索引查找

    t = (1,2,3)
    print(t[0])   # 1   
    
  2. index()

    t = (1,2,3)
    print(t.index(1))  # 0
    
  3. count()

  4. len()

元组内的直接数据如果修改则会立即报错,但如果元组里面有列表,修改列表里面的数据则是支持的

t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print(t)
# ('a', 'b', ['X', 'Y'])

该tuple定义时有3个元素,分别是'a' 'b' 和一个list,表面上,tuple的元素确定变了,但其实变的并不是tuplt的元素,而是list的元素,tuple指向的list并没有发生改变,所谓tuple的’不变’,是tuple的每个元素,指向永远不变,即指向一个list,便不能改成指向其他对象,但指向的这个list本身是可变的

字典(dict)
特点
  • 符号为大括号=={}==
  • 数据为键值对key:value形式出现
  • 各个键值对之间用逗号 , 隔开
语法
# 有数据字典
dict1 = {'name':'Tom','age':20,'gender':'男'}

# 空字典
# 方式一
dict2 = {}

# 方式二
dict3 = dict()
常用操作
  • 写法:字典序列[key] = 值

    注意:

    如果key存在则修改这个key对应的值;如果key不存在则新增此键值对

    字典不支持索引

    字典属于可变类型

    # 增
    dict1 = {'name':'Tom','age':21,'gender':'男'}
    print(dict1)   # {'name': 'Tom', 'age': 21, 'gender': '男'}
    
    dict1['name'] = 'Rose'
    print(dict1)   # {'name': 'Rose', 'age': 21, 'gender': '男'}
    
    # 如果key不存在,则新增
    dict1['id'] = 1
    print(dict1)   # {'name': 'Rose', 'age': 21, 'gender': '男', 'id': 1}
    
  • 方法名称功能
    del() / del删除字典或删除字典中指定键值对
    clear()清空字典
    # 删
    dict2 = {'name':'Tom','age':21,'gender':'男'}
    # del()
    del dict2['name']
    print(dict2)   # {'age': 21, 'gender': '男'}
    
    # clear()
    dict3 = {'name':'Tom','age':21,'gender':'男'}
    dict3.clear()
    print(dict3)   # {}
    
    # del 删除字典
    del dict2
    print(dict2)   # 报错,'dict2' is not defined
    
  • 写法:字典序列[kye] = 值

    注意:

    如果key存在则修改key对应的值;如果key不存在则新增此键值对

    1. 按key值查找

      # 查
      # 1.按key值查找
      dict4 = {'name':'Tom','age':21,'gender':'男'}
      print(dict4['name'])   # 结果为Tom
      print(dict4['age'])   # 结果为21
      print(dict4['id'])   # 报错
      

      如果当前查找的key存在,则返回对应的值;否则报错

    2. 方法/函数

      方法名称功能
      get(key,default = None)返回指定键的值,如果值不再字典中返回default值
      keys()以列表返回一个字典所有的键
      values()以列表返回一个字典所有的值
      item()以列表返回可遍历的(键,值)元组数组
      dict5 = {'name':'Tom','age':21,'gender':'男'}
      # 2.函数/方法
      # 2.1 get()
      print(dict5.get('name'))   # Tom
      print(dict5.get('id',0))   # 0
      
      # 2.2 keys()
      print(dict5.keys())   # dict_keys(['name', 'age', 'gender'])
      
      # 2.3 values()
      print(dict5.values())   # dict_values(['Tom', 21, '男'])
      
      # 2.4 items()
      print(dict5.items())    # dict_items([('name', 'Tom'), ('age', 21), ('gender', '男')])
      
字典的循环遍历
  • 遍历字典的key

    dict = {'name':'Tom','age':21,'gender':'男'}
    
    for key in dict.keys():
        print(key)
        
    '''
    结果为:
    name
    age
    gender
    '''
    
  • 遍历字典的value

    dict = {'name':'Tom','age':21,'gender':'男'}
    for value in dict.values():
        print(value)
        
    '''
    结果为:
    Tom
    21
    男
    '''
    
  • 遍历字典的元素(即键值对)

    dict = dict = {'name':'Tom','age':21,'gender':'男'}
    for item in dict.items():
        print(item)
    
    '''
    结果为:
    ('name','Tom')
    ('age',21)
    ('gender','男')
    '''
    
  • 遍历字典的键值对

    dict = dict = {'name':'Tom','age':21,'gender':'男'}
    for key,value in dict.items():   # 两个临时变量   元组数据1是字典的key 元组数据2是字典的value
        print(f'{key} = {value}')
        
    '''
    结果为:
    name = Tom
    age = 21
    gender = 男
    '''
    
  • 注意:

    dict = {'name':'Tom','age':21,'gender':'男'}
    for i in dict:
        print(i)
    
    # 如果直接遍历字典,结果如下,只会遍历字典的key
    '''
    结果为:
    name
    age
    gender
    '''
    
集合

+++++++

创建集合使用{}set(),但如果要创建空集合只能使用set(),因为{}用来创建空字典。

s = {10,20,30,4,50}
print(s)   # {10,20,30,50,4}

s0 = {10,20,20,30,40,40}
print(s0)  # {10,20,30,40}

s3 = {'abcdef'}
print(s3)   #{'a','e','c','d','f','b'}

# 创建空集合
s1 = set()
print(type(s1))   # set

s2 = {}
print(type(s2))    # dict

注意:

集合的特点:

1.集合具有去重的特性,即不会出现重复的数据

2.集合数据没有顺序

集合常见操作方法
  • 增加数据

    方法名称功能
    add()用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作(添加的必须是单一数据)
    update()用于修改当前集合,可以添加新的序列到当前集合中,如果添加的元素在集合中已存在,则重复的会忽略(添加的必须是数据序列)
    # 增加
    s = {10,20}
    print(s)   # {10, 20}
    # add()
    s.add(100)
    print(s)   # {100, 10, 20}
    # 集合为可变类型
    s.add(100)
    print(s)   # {100, 10, 20}  去重
    s.add([10,20,30])
    print(s)   # 报错
    
    # update()
    s.update([10,20,30,40,50])
    print(s)    # {100, 40, 10, 50, 20, 30}  重复的会省略
    
    s.update(10)
    print(s)  # 报错
    
  • 删除数据

    方法名称功能
    remove()删除集合中的指定数据,如果数据不存在则报错
    discard()删除集合中的指定数据,如果数据不存在也不会报错
    pop()随机删除集合中的某个数据,并返回这个数据
    # 删除
    s = {10,20,30,40}
    # remove()
    s.remove(10)   # {40, 20, 30}
    print(s)
    s.remove(50)   # 报错
    
    # discard()
    s.discard(20)
    print(s)   # {40, 30}
    s.discard(50)
    print(s)    # 不会报错 {40, 30}
    
    # pop()
    t = s.pop()
    print(s)   # {30}
    print(t)    # 40
    
  • 查找数据

    in: 判断数据在集合序列

    not in :判断数据不在集合序列

    # 查找
    
    s = {10,20,30,40}
    print(10 in s)  # True
    print(10 not in s)   # False
    

如果你看到此处,我想我会很开心吧!
最后,分享一首诗,谢谢!

一生至少该有一次
为了某个人而忘了自己
不求结果
不求同行
不求曾经拥有
甚至不求你爱我
只求在我最美的年华里
遇见你
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值