当前位置: 代码迷 >> 综合 >> day8-集合和字符串
  详细解决方案

day8-集合和字符串

热度:52   发布时间:2024-02-04 21:25:57.0

集合

  1. 集合是容器型数据类型;将{}作为容器的标志,多个元素用逗号隔开:{元素1,元素2…} 集合可变,无序

元素:不可变且唯一

空集合:x={} 是字典

? y = set() 是空集合

集合自带去重功能

set3 = {1, 2, 3, 1, 2, 2, 4}
print(set3)  # {1, 2, 3, 4}
names = ['张三', '李四', 'tom', '张三']
names = set(names)
print(names)

集合是无序的

print({1, 2} == {2, 1})  # True
  1. 集合的增删改查

    1. 查 - 遍历

      print("=====")
      set4 = {10, 20, 70, 90}
      for x in set4:print(x)
      
    2. set4 = {10, 20, 70, 90}
      # 集合.add(元素) - 在集合中添加元素
      set4.add(100)
      print(set4)  # {100, 70, 10, 20, 90}
      # b.集合.update(序列) - 将序列中所有的元素添加到集合中
      set4.update('abc')
      print(set4)  # {100, 70, 'c', 10, 'a', 'b', 20, 90}
      
    3. # 集合.remove(元素) - 删除指定元素, 如果元素不存在,就会报错
      set4 = {10, 20, 70, 90}
      set4.remove(70)
      print(set4)  # {10, 20, 30}# 集合.discard(元素) - 删除指定元素(如果元素不存在不会报错)
      set4 = {10, 20, 70, 90}
      # set4.discard(200)
      set4.discard(20)
      print(set4)
      
    4. 改 - 无法修改元素

  2. 数学集合运算:python集合支持数学的集合运算:子集(>, <, <=, >=), 并集(|), 交集(&),差集(-), 对称差集(^)

    1. 子集

      print({200, 300, 600} > {1, 2})  # False(不是比较大小)
      # a. 集合1 > 集合2 - 判断集合2是否是集合1的真子集
      print({10, 20, 30} > {10, 20})  # True
      print({10, 20} > {10, 20})  # False# b.集合1 >= 集合2 - 判断集合2是否是集合1的子集
      print({10, 20, 30} >= {10, 20})  # True
      print({10, 20} >= {10, 20})  # True
      
    2. 并集

      set1 = {1, 2, 3, 4, 5, 6}
      set2 = {4, 5, 6, 7, 8}
      print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7, 8}
      
    3. 交集

      set1 = {1, 2, 3, 4, 5, 6}
      set2 = {4, 5, 6, 7, 8}
      print(set1 & set2)  # {4, 5, 6}
      
    4. 差集

      print(set1 - set2)  # {1, 2, 3}
      print(set2 - set1)  # {8, 7}
      
    5. 对称差集

      print(set1 ^ set2)  # {1, 2, 3, 7, 8}
      

字符串和字符

  1. 字符串是容器型数据类型;以’ ‘或者""" “”"或者’’’ ‘’'作为容器标志,里面有多个字符

不可变(不支持增删改);有序(支持下标操作)

字符串的元素:字符串的每个基本单元,字符(任何符号都可以)

# 字符串
str1 = 'abc'
str2 = "abc123"
str3 = '''abc123'''
str4 = """abc123"""# """"""和 ''''''引起来的字符串可以直接敲回车换行
str5 = ''' hello 123 jdsk '''
  1. 字符

    python没有字符对应的类型,只有字符的概念

    1)普通字符:包含所有的符号,例如:数字、字母、中文、特殊符号

    2)转义字符:和\结合后具有特殊功能的字符,就是转义字符

    • \n - 换行

    • \t - 一个水平制表符

    • \’ - 一个单引号

    • \" - 一个双引号

    • \\ - 一个反斜杠字符

      注意:任何一个转义字符的长度是1

    # 普通字符
    str1 = '123'
    str2 = 'ahsj'
    str3 = '#?@@*'# 转义字符
    str1 = '21\nabc'
    print(str1)str2 = '12\'k'
    print(str2)str5 = '\t123abc'
    print(str5)str6 = '123\u4effsd'
    print(str6)
    

    ?

    1. 阻止转义

      python中在字符的最前面加r/R, 可以让这个字符串中所有的转义字符的功能消失

      str7 = '\tabc\n123\\aaa'
      print(str7)
      str8 = R'\tabc\n123\\aaa'
      print(str8, len(str8))  # \tabc\n123\\aaa 15
      

    ?

    计算机字符存储

    计算机在存储数据的时候,只能直接存储数字数据以二进制的形式存在

    1. 字符编码

      为了能让计算机存储字符,我们给每一个字符关联一个具体的数字,在需要存储字符的时候就存储字符对应的数字;每个字符对应的数字就是字符的编码值。

    2. 编码表

      保存字符和数字一一对应关系的表就是字符编码表,常见的字符编码表有:ASCII 和 Unicode编码表

      1. ASCII:采用一个字节对128个字符进行编码,其中包括常用的英文符号,数字和字母。其他的数字的编码在字母的前面,大写字母的编码在小写字母前面,大小写字母不连续
      2. Unicode编码表:叫万国码,前128个字符就是ASCII中的字符。中文的编码范围:4e00 ~ 9fa5
    3. 编码字符:\u四位的十六进制数(四位的十六进制数就是字母的编码值)

      str1 = 'a\u0061'
      print(str1)str2 = '\u4e00\u4e01\u4e05'
      print(str2)
      
    4. chr函数

      # chr(编码值) - 获取编码值对应的字符
      print(chr(97))  # a# 练习:打印所有的汉字
      for i in range(0x4e00, 0x4e05):print(chr(i))
      
    5. ord函数

      # ord(字符) - 获取字符的编码值
      print(ord('牧'), ord('奇'))
      print(hex(ord('牧')), hex(ord('奇')))
      

字符串的相关操作

1.获取字符串

字符串获取字符和列表获取元素的方法一样

? 1)获取单个字符

str1 = '人生苦短,我用python!'
print(str1[5])str2 = 'how are\n you!'
print(str2[-4],str2[9])  # y y

? 2) 切片

message = '曾经有一份真挚的爱情摆在我面前,我没有珍惜...'
print(message[1:])  # 经有一份真挚的爱情摆在我面前,我没有珍惜...
print(message[2:10:3])  # 有真爱
print(message[-10: -2: -1])  # ''

? 3)遍历

message2 = '你以为我以为就是你以为的'
for x in message2:print(x)message3 = 'you jump, i jump!'
for x, y in enumerate(message3):print(x, y)# 练习1:打印message3中每个字符的编码值
print("===练习1===")
for x in message3:print(ord(x))# 练习2:统计message4中中文字符的个数
print("===练习2===")
message4 = 'how are you? 我很好!你呢?'
count = 0
for x in message4:if 0x4e00 <= ord(x) <= 0x9fa5:count += 1
print(count)
  1. 加法和乘法运算

    字符串1+字符串2 - 将两个字符串合并产生一个新的字符串

    str1 = 'abc' + '123'
    print(str1)
    

    字符串 * N / N *字符串 - 产生N个一样的字符串

    str2 = 'abc' * 3
    print(str2)  # abcabcabc
    

3.比较运算:>, < >=, <=

两个字符串比较大小比较的是第一对不相等的字符的编码值大小
判断一个字符是否是小写字母:‘a’ <= x <= ‘z’
判断一个字符是否是大写字母:‘A’ <= x <= ‘Z’
判断一个字符是否是字母:‘a’ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’
判断一个字符是否是数字字符:‘0’ <= x <= ‘9’
判断一个字符是否是中文字符:’\u4e00’ <= x <= ‘\u9fa5’

print('abc' > 'ABC123')  # True
print('你123' > 'a123')  # True# 练习3:取出字符串中所有的小写字母
print('===练习3===')
str3 = 'ho3w2a但是ndHwMPhy键'
new_str = ''
for i in str3:if 'a' <= i <= 'z':new_str += i
print(new_str)# 练习4:将字符串中所有的小写字母转换成大写字母
print('===练习4===')
new_str = ''
for i in str3:if 'a' <= i <= 'z':new_str += chr(ord(i) - 32)else:new_str += i
print(new_str)
  1. in 和 not in

    字符 in 字符串 - 判断字符串中是否有指定的字符
    字符串1 in 字符串2 - 判断字符串2中是否包含字符串1print('a' in 'abc')  # True
    print('how' in 'how are you!')  # True
    print('how' in 'habco12w')  # False