day7集合和字符串

集合和字符串

1.集合(set)

1.1 集合
集合是容器型数据类型,将{}作为容器型标志,里面的元素用多个逗号隔开:{元素1, 元素2, 元素3, …}
集合是可变的,无序的
元素:数据类型不可变且唯一

# 1)空集合
x = {}  # 空字典
y = set()   # 空集合

# 2)元素是不可变的
s = {10, 'abc', (1, 2)}
print(s)    # {10, (1, 2), 'abc'}
# s = {10, 'abc', [1, 2]}
# print(s)  TypeError: unhashable type: 'list'

# 3)元素是唯一的
s = {10, 20, 10, 30, 40}
print(s)    # {40, 10, 20, 30}

# 4)集合去重
names = ['张三', '李四', '老王', '李四', '张三', '张三']
names = list(set(names))
print(names)     # ['老王', '李四', '张三']

# 5)集合是无序的
print({1, 2, 3} == {2, 3, 1})   # True

1.2 集合的增删改查

# 1) 查  -   集合只能遍历(通过for循环遍历无序序列的时候,都是先将序列转换成列表,然后遍历列表)
games = {'QQ炫舞', '扫雷', '贪吃蛇', '我的世界', '侠盗猎车', '红警'}
for x in games:
    print('x:', x)
    
# 2) 增
# 集合.add(元素)    -   在集合中添加指定元素
# 集合.update(序列)    -    将序列中所有的元素添加到集合中(序列中的元素是不可变的)
games.add('英雄联盟')
print(games)
games.update({'开心消消乐', '王者荣耀'})
print(games)

# 3) 删
# 集合.remove(元素)     -   删除指定元素(不存在会报错)
# 集合.discard(元素)    -   删除指定元素(不存在不会报错)
games.remove('贪吃蛇')
print(games)
games.discard('我的世界')
print(games)

# 4) 改
# 先删除原来的,在添加新的
games.remove('王者荣耀')
games.add('部落冲突')
print(games)

1.3 数学集合运算

# python中的集合支持数学中的集合运算:&(交集)、|(并集)、-(差集)、^(对称差集)、>、<、>=、<=(判断包含关系)
set1 = {1, 2, 3, 4, 5, 6, 7}
set2 = {4, 5, 6, 7, 8, 9, 10}
# 1) 集合1 & 集合2  -   求两个集合的公共部分
# 2) 集合1 | 集合2  -   合并两个集合产生一个新的集合
# 3) 集合1 - 集合2  -   集合1去掉包含在集合2中剩下的元素
# 4) 集合1 ^ 集合2  -   将两个集合合并后去掉公共部分
print(set1 & set2)  # {4, 5, 6, 7}
print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
print(set1 - set2)  # {1, 2, 3}
print(set1 ^ set2)  # {1, 2, 3, 8, 9, 10}

# 5)>、<、>=、<=   -   判断包含关系

2.字符串(str)

2.1字符串
字符串是容器型数据类型,将’’、" “、’’’ ‘’’、”"" “”"作为容器的标志
字符串是不可变的(不支持增删改);字符串是有序的(支持下标操作)
元素:引号里面的每个基本单元就是字符串的元素,又叫字符(python中只有字符的概念,没有字符对应的类型,
一般是直接使用长度是1的字符串来表示字符)

# 1) 空串
s1 = ''
s2 = ""
s3 = ''''''
s4 = """"""
print(type(s1), type(s2), type(s3), type(s4))
# <class 'str'> <class 'str'> <class 'str'> <class 'str'>

# 2) ''、"" 与 ''''''、""""""的区别
# ''、""     -   字符串中不能直接换行

# 3) 字符串有序
print('abc' == 'cba')  # False

2.2 字符

  1. 转义字符
    在特定的一个或者多个字符钱加 \ 让符号具有特殊功能或者特殊意义,那么这种带有 \ 字符就是转义字符:
    \n :换行
    \t :水平制表符,相当于按一下Tab键
    ‘、"、\:表示一个普通的’、"、
    注意:任何一个转义字符的长度都是1

  2. 普通字符
    除了转义字符意外的字符都是普通字符,普通字符在字符串中表示这个符号本身
    包括:汉字、数字、字母、符号、表情符号(🍄❀🐂🐖🐉🐍🦅🐎🐥)等…

# 特殊的转义字符-编码字符:\u四位的十六进制数   -   表示16进制数对应的编码值对应的字符
print('abc\u005a')  # abcZ

2.3 字符编码
1)什么是字符编码
计算机在存储数据的时候只能存数字(存的数字二进制补码),为了能够让计算机存储字符,我们给每一个字符都对应一个固定的数字,那么每个字符对应的固定的数字就是这个字符的编码值

2)字符编码表 - 记录字符和数字之间一一对应关系的表就是字符编码表
常见的字符编码表有两种:ASCII码表、Unicode编码表(python采用的是Unicode编码表)
a.ASCII码表
ASCII码表总共有128个字符对应的编码,主要包含的是美国的通用字符,其中包括:英文标点符号、数字字符、字母字符以及其他的一些符号
ASCII码表中,数字字符在字母的前面,大写字母在小写字母前面,大写字母结束后有其他的字符,然后才是小写字母

b.Unicode编码表
Unicode编码表包含ASCII码表
中文编码范围:4e00 ~ 9fa5

# 1)编码字符:\u4位的16进制编码值
print('\u11ef') # ᇯ

# 2)chr(编码值)    -   获取编码值对应的字符
print(chr(0x4e00))  # 一
print(chr(0x9fa5))  # 龥
# 打印所有的中文字符
count = 0
for x in range(0x4e00, 0x9fa5+1):
    print(chr(x), end=' ')
    count += 1
    if count % 25 == 0:
        print()

# 3)ord(字符)     -   获取字符对应的编码值(返回的是十进制数)
print(ord('🐉')) # 128009
print(ord('刘'), ord('浩'), ord('然')) # 21016 28009 28982
print(hex(21016), hex(28009), hex(28982))   # 0x5218 0x6d69 0x7136

3.字符串操作

3.1 获取字符
字符串获取字符的操作和列表获取元素的方法一样
3.2 加法和乘法

print('abc' + '123')    # abc123
print('abc' * 3)    # abcabcabc

3.3 比较运算
两个字符串比较大小:比较第一对不相等的字符编码值的大小

‘a’ <= ‘char’ <= ‘z’ - 小写字母
‘A’ <= ‘char’ <= ‘Z’ - 大写字母
‘a’ <= ‘char’ <= ‘z’ or ‘A’ <= ‘char’ <= ‘Z’ - 字母
‘0’ <= ‘char’ <= ‘9’ - 数字
‘\u4e00’ <= ‘char’ <= ‘\u9fa5’ - 中文字符

print('abc' > 'XYMN')   # True
print('abc' > '你好')    # False

# 练习:输入一个字符串,统计字符串中小写字母的个数
n = str(input('请输入一个字符串:'))
count = 0
for i in n:
    if 'a' <= i <= 'z':
        count += 1
print('小写字母的个数:', count)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值