Chapter 7 元组、集合、字符串的相关内容

Chapter 7 元组、集合、字符串的相关内容

Statement文章声明:仅作为个人学习笔记,一切失误概不负责。不杠不贬,文明网络环境建设!!


元组和集合

  1. 元组(tuple)
  • 什么是元组

容器; ()为容器标志, 多个元素间逗号隔开: (元素1, 元素2, …)

有序(下标操作); 不可变(查操作)

元素: 任何数据

只有一个元素的元组 - 唯一元素后必须加逗号

t2 = (100,)
print(t2, type(t2), len(t2))

没有歧义时,元组的()可以省略 - 直接将多个元素用逗号隔开

t3 = 10, 20, 30
print(t3, type(t3), len(t3))

t4 = 10, 20, 30 * 3
print(t4, type(t4), len(t4))

t5 = (10, 20, 30) * 3
print(t5, type(t5), len(t5))

t6 = 10,
print(t6, type(t6), len(t6))
  • 元组是"不可变的列表"

能用的 - 和可变无关的操作: 查, 创建新元组等

运算符: +, *, >, <, >=, <=, ==, !=, in, not in
相关操作: 索引, 切片
相关函数: sum, max, min, sorted, len, tuple
相关方法:copy, count, index
  1. 集合
  • 什么是集合

容器; {}为容器标志, 多个元素用逗号隔开: {元素1, 元素2, 元素3, …}

可变(增删改), 无序(无下标操作)

元素要求: 和字典对键的要求一样(不可变数据; 唯一)

  • 空集合
s1 = set()
print(s1, type(s1), len(s1))
  • 元素是不可变数据类型
s2 = {10, 'abc', (1, 2)}
print(s2)
# s3 = {10, 'abc', [1, 2]}      # 报错
  • 元素唯一 - 去重(原序列元素是不可变数据类型)
s3 = {10, 20, 10, 10, 30, 20}
print(s3)           # {10, 20, 30}
  • 数学集合运算 - (创建新集合)

&(交集), |(并集), -(差集), ^(对称差集), >, <(真子集), <=, >=(子集)

==, !=

"""
集合1 & 集合2 - 获取两个集合公共部分
集合1 | 集合2 - 合并两个集合
集合1 - 集合2 - 获取集合1中不包含在集合2中的部分
集合1 ^ 集合2 - 两个集合非公共部分合并
集合1 > 集合2 - 集合2是否为集合1的真子集
集合1 < 集合2 - 集合1是否为集合2的真子集
集合1 >= 集合2 - 集合2是否为集合1的子集
集合1 <= 集合2 - 集合1是否为集合2的子集
空集是任何非空集合的真子集
"""

认识字符串

  • 什么是字符串(str)

容器; ‘’, “”, ‘’‘’‘’, “”“”""作为容器的标志, 引号中的每个符号就是字符串的元素: ‘[abc] {123,}’

不可变(查, 产生新字符串), 有序(下标操作)

元素: 字符 - 任意符号(普通字符, 转义字符)

  • 三引号只有在特定位置为注释, 在其他位置不将其保存也能执行注释功能, 此时其为字符串, 参与编译,但不占据内存

字符串中每个符号都是字符串元素, 对于符号本身没有限制

​ 一个转义字符为一个元素, 一个空格为一个元素

多行字符串 - 三个引号开头的字符串, 可以在字符串内部直接回车换行

​ 单个引号开头的字符串, 要换行需要\n等操作

空字符串 - 内部不能有空格

str7 = ''
print(len(str7), typr(str7))

字符和转义字符

  • 字符 - 字符串元素
  • 普通字符

    在字符串中表示符号本身的字符, 例如: 中文, 字母, 数字等

  • 转义字符 - 在特定符号前加\来表示特殊功能或特殊意义的符号

    转义字符功能意义
    \t水平制表符(相当于按一次tab键)
    \n换行符(相当于按一次回车)
    普通单引号
    "普通双引号
    \普通反斜杠
print('\tabc\n123')

print('it\'s me')
print("it's me")

print("I say, \"you see see you, one day day\"")
print('I say, \"you see see you, one day day\"')
print('I say, "you see see you, one day day"')

print('\\tabc\\n123')
  • R/r 语法

语法: r’字符串内容’ 或 R’字符串内容’

让字符串内容中所有转义字符失效, 都变成普通字符

str1 = r'\\\\t123\ndas\u4e00'
print(str1)

字符编码

  • 字符编码

源码-> 反码-> 补码

  • 计算机存储原理:

    计算机保存数据只能存数字, 而且存的是数字的补码

  • 字符编码:

    一个符号唯一对应一个固定数字, 存储符号时保存对应的数字, 这个数字为该符号的编码值, 解码时先根据数据类型判断提取到的数字是数值本身还是要转换成字符

  • 编码表

保存符号和编码值对应关系

  • ASCII码表
"""
通过一个字节来对128个字符进行编码, 只包含美国通用符号.
数字在大写字母前面, 大写字母在小写字母前面, 数字和大写字母中间/大写字母和小写字母中间有间隙(A-65, a-97)
"""
  • Unicode编码表(python) - 万国码/统一码

    包含了世界上几乎所有国家民族所有语言的符号

"""
a. Unicode编码表是ASCII码表的扩展, 包含ASCII码表
b. 中文编码值范围(16进制):4e00~9fa5
"""
  • python使用编码值

chr函数: chr(编码值) - 获取编码值对应的字符

ord函数: ord(字符) - 获取指定字符对应的编码值

编码字符: 在字符串中用’\u4位的16进制编码值’

注意: 如果想要在程序中直接使用16进制数, 数字前必须加前缀’0x’, ‘0X’

获取字符

  • - 获取元素(字符)

一个空格 - 长度1

一个转义字符 - 长度1

列表获取元素的方法字符串都支持:

​ 获取单个元素: 字符串[下标] - 越界报错

​ 切片: 字符串[开始下标:结束下标:步长]

​ 遍历:

"""
for 元素 in 字符串

for 下标 in range(len(字符串))

for 下标, 元素 in enumerate(字符串)
"""
  • 相关操作

比较相等: ==, !=

  1. 运算符: +, *
"""
字符串1 + 字符串2 - 将两个字符串合并为一个新的字符串
字符串 * N - 将N个字符串合并成一个新的字符串
"""
  1. 比较大小: >, <, >=, <=

比较第一对不相等字符的编码值大小
两个字符比较大小就是比较两个字符的编码值的大小

"""
是否是数字:'0' <= x <= '9'
是否小写字母: 'a' <= x <= 'z'
是否字母: 'A' <= x <= 'Z' or 'a' <= x <= 'z'
是否是中文: '\u4e00' <= x <= '\u9fa5'
"""
  1. in 和 not in

字符串1 in 字符串2 - 判断字符串2中是否包含字符串1(判断字符串1是否是字符串2的子串)


练习题

  1. 输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)

    例如: 输入’abcd1234 ’ 输出’bd24’

    s = input('输入')
    print(s[1:len(s):2])
    
  2. 输入用户名,判断用户名是否合法(用户名长度6~10位)

    s = input('输入')
    print('合法' if 6 <= len(s) <= 10 else '不合法')
    
  3. 输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)

    例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法

    s = input('输入')
    for x in s:
     if not(('0' <= x <= '9') or ('a' <= x <= 'z') or ('A' <= x <= 'Z')):
         print('不合法')
         break
    else:
     print('合法')
    
  4. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

    例如: ‘abc’ — 不合法 ‘Mabc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法

    s = input('输入')
    if 'A' <= s[0] <= 'Z':
     for i in range(1, len(s)):
         if not(('0' <= s[i] <= '9') or ('a' <= s[i] <= 'z') or ('A' <= s[i] <= 'Z')):
             print('不合法')
             break
     else:
         print('合法')
    else:
     print('不合法')
    
  5. 输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串

    例如:输入**‘abc1shj23kls99+2kkk’** 输出:‘123992’

    s = input('输入')
    s1 = ''
    for i in s:
     if '0' <= i <= '9':
         s1 += i
    print(s1)
    
  6. 输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)

    例如: 输入**‘a2h2klm12+’ ** 输出 ‘A2H2KLM12+’

    s = input('输入')
    s1 = s.upper()
    print(s1)
    
    s2 = ''
    for i in s:
     if 'a' <= i <= 'z':
         i = chr(ord(i) - 32)
         s2 += i
     else:
         s2 += i
    print(s2)
    
    
  7. 输入一个小于1000的数字,产生对应的学号

    例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**

    s = input('输入小于1000的数字')
    if len(s) == 1:
     print('py190100' +s)
    elif len(s) == 2:
     print('py19010' +s)
    else:
     print('py19011' + s)
    
  8. 输入一个字符串,统计字符串中非数字字母的字符的个数

    例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**‘===’** 输出:3

    s = input('输入')
    print(len([x for x in s if not(('0' <= x <= '9') or ('a' <= x <= 'z') or ('A' <= x <= 'Z'))]))
    
  9. 输入字符串,将字符串的开头和结尾变成’+',产生一个新的字符串

    例如: 输入字符串**‘abc123’, 输出’+bc12+'**

    s = input('输入')
    print('+' + s[1:len(s)] + '+')
    
  10. 输入字符串,获取字符串的中间字符

    例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**

    s = input('输入')
    if len(s) % 2 == 1:
     print(s[len(s)//2])
    else:
     print(s[len(s)//2-1], s[len(s)//2], sep='')
    
  11. 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)

    例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8

    s1 = 'how are you? Im fine, Thank you!'
    s2 = 'you'
    for i in range(len(s1)):
     if s1[i:i+3] == s2:
         print(i)
         break
    
  12. 获取两个字符串中公共的字符

    例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3

    s1 = 'abc123'
    s2 = 'huak3'
    s3 = ''
    for x in s1:
     for y in s2:
         if x ==y:
             s3 += x
    print(s3)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值