欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

day08元组、字典、字符串

程序员文章站 2022-07-14 18:54:28
...

一、元组

  1. 什么是元组(tuple)

    • 元组是容器(序列), 将()作为容器的标志,里面多个元素用逗号隔开:(元素1,元素2,元素3,。。。
    • 不可变的(不支持增、删、改);有序的(支持下标)
    • 元组的要求和列表一样(元组就是不可变的列表)
    t1 = (10, 20, True, 'abc', ['a', 'b'], {'a': 10, 'b': 20})
    print(t1, type(t1))
    

  2. 列表获取元素的方法元组都支持

    t2 = ('周一', '周二', '周三', '周四', '周五', '周六', '周天')
    print(t2[1])        # 周二
    print(t2[-1])       # 周天
    print(t2[::-1])     # ('周天', '周六', '周五', '周四', '周三', '周二', '周一')
    print(t2[-2:1:-1])  # ('周六', '周五', '周四', '周三')
    print(t2[:4:-1])    # ('周天', '周六')
    
  3. 元组的持有或者常用的一些操作
    1)只有一个元素的元组:必须在唯一的那个元素后加逗号

    t3 = (10)
    print(t3, type(t3))  # 10 <class 'int'>
    
    t4 = (10, )
    print(t4, type(t4))  # (10,) <class 'tuple'>
    

    2)在没有歧义的情况下,元组的小括号可以直接省略。(直接将多个元素用逗号隔开,也是表示一个元组)

    t5 = (10, 20, 30)
    print(t5, type(t5))   # (10, 20, 30) <class 'tuple'>
    
    t6 = 10, 20, 30
    print(t6, type(t6))   # (10, 20, 30) <class 'tuple'>
    
    1. 可以通过让变量的个数和元组中元素的个数保持一致,来获取元组中的每个元素
    point = (100, 200)
    print(point[0], point[1])   # 100 200
    
    x, y = point
    print(x, y)     # 100 200
    
    point1 = (20, 30, 40)
    x, y, z = point1
    print(x, y, z)      # 20 30 40
    
    list1 = [10, 'abc']
    a, b = list1
    print(a, b)     # 10 abc
    

    4)可以让变量个数小于元组的个数,但是必须在其中一个变量前加*,
    取值的时候可以先让不带按照顺序先取,剩下的元组以列表的形式返回给的变量

    t2 = ("小明", 18, 89, 78, 67, 45)
    x1, *x2 = t2
    print(x1, x2)        # 小明 [18, 89, 78, 67, 45]
    
    x1, x2, *x3 = t2
    print(x1, x2, x3)    # 小明 18 [89, 78, 67, 45]
    
    x1, *x2, x3 = t2
    print(x1, x2, x3)    # 小明 [18, 89, 78, 67] 45
    
    x1, x2, *x3, x4 = t2
    print(x1, x2, x3, x4)  # 小明 18 [89, 78, 67] 45
    

二、集合

  • 集合是容器(序列),将{}作为容器的标志,里面多个元素用逗号隔开:{元素1, 元素2, 元素3,…}

  • 可变的;无序的

  • 元素的要求:不可变的;唯一的

    x = {}
    print(type(x))      # <class 'dict'> 此不是空集合
    
    1. 空集合

      s1 = set()
      print(type(s1), len(s1))  # <class 'set'> 0
      
    2. 元素不可变

      s2 = {10, True, 'abc', (1, 2)}
      print(s2)     # {(1, 2), True, 10, 'abc'}
      
      s3 = {10, True, 'abc', [1, 2]}
      print(s3)     # 报错,TypeError: unhashable type: 'list'
      
    3. 集合无序

      print({1, 2, 3} == {2, 3, 1})   # True
      
    4. 元素唯一

      s3 = {1, 2, 3, 3, 2, 3, 4}
      print(s3)   # {1, 2, 3, 4}
      
    5. 集合自带去重功能

      scores = [89, 78, 69, 88, 89, 90, 100]
      new_score = list(set(scores))
      print(new_score)    # [100, 69, 78, 88, 89, 90]
      

数学集合运算

数学集合运算:交集、并集、差集、对称集

  • 交集(&) - 求两个集合的公共部分

    s1 = {1, 2, 3, 4, 5, 6, 7}
    s2 = {5, 6, 7, 8, 9}
    result = s1 & s2
    print(result)   # {5, 6, 7}
    
  • 并集(|) - 合并两个集合

    s1 = {1, 2, 3, 4, 5, 6, 7}
    s2 = {5, 6, 7, 8, 9}
    result = s1 | s2
    print(result)  # {1, 2, 3, 4, 5, 6, 7, 8, 9}
    
  • 差集(-) - 集合1 - 集合2 -> A - B = AB一拔

    s1 = {1, 2, 3, 4, 5, 6, 7}
    s2 = {5, 6, 7, 8, 9}
    result = s1 - s2
    print(result)   # {1, 2, 3, 4}
    
    result = s2 - s1
    print(result)   # {8, 9}
    
  • 对称差集(^) - 求两个集合的公共部分

    s1 = {1, 2, 3, 4, 5, 6, 7}
    s2 = {5, 6, 7, 8, 9}
    print(s1 ^ s2)   # {1, 2, 3, 4, 8, 9}
    

练习:用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)

python = {'stu1', 'stu4', 'stu5', 'stu6', 'stu8', 'stu10', 'stu11'}
java = {'stu2', 'stu4', 'stu7', 'stu8', 'stu9', 'stu10'}
h5 = {'stu1', 'stu3', 'stu7', 'stu8', 'stu10', 'stu11'}

# a. 求选课学生总共有多少人
sum1 = python|java|h5
print(len(sum1))   # 11

# b. 求只选了第一个学科的人的数量和对应的名字
students = python - java - h5
print(students)  # {'stu5', 'stu6'}

# c. 求只选了一门学科的学生的数量和对应的名字
students1 = python - java - h5 | java - python - h5 | h5 - python - java
# students1 = python ^ java ^ h5 - java & python & h5
print(students1)   # {'stu5', 'stu3', 'stu9', 'stu2', 'stu6'}

# e. 求选了三门学生的学生的数量和对应的名字
students3 = python & java & h5
print(students3)  # {'stu10', 'stu8'}

# d. 求只选了两门学科的学生的数量和对应的名字
students2 = sum1 - students1 - students3
print(students2)  # {'stu7', 'stu11', 'stu1', 'stu4'}

三、字符串

  1. 什么是字符串 (str)

    • 字符串是容器(序列)、将 ‘’、""、’’’’’’、""""""作为容器的标志,在引号中的每一个符号都是字符串的

    • (字符串的元素又叫字符)

    • 不可变(所以所有字符串相关的可变操作,全部都是会产生一个新的字符串);有序的

    • 字符串的元素(字符):通过任何手段可以放入引号的中的符号都可以作为字符串的元素 -> as15#$2????

      注:

      • ''和""没有区别
      str1 = 'abc'
      str2 = "abc"
      print(id(str1), id(str2))  # 2452259079984 2452259079984
      
      str3 = '''abc'''
      str4 = """abc"""
      print(type(str3), type(str4))  # <class 'str'> <class 'str'>
      
      str7 = 'as15#$2????'
      print(str7)
      
      • 注意:’‘和"""引起来的字符串不能通过回车换行, ‘’’’’'和""""""引起来的字符串内容可以直接通过回车换行

        # str5 = 'abc
        #         123'
        
        str6 = '''abc
        123'''
        print(str6)
        
  2. 字符

    • 字符分为普通字符和转义字符两种。
      1)普通字符
      除了转义字符意外的字符都是普通字符。

      2)转义字符 - 在一些特定符号前加 \ 在字符串表示一些具有特殊功能或者特殊意义的符号。
      \n - 换行
      \t - 水平制表符(相当于按一次tab键)
      \’ - 表示一个单引号
      \" - 表示一个双引号

      \\ - 表示一个反斜杠

      \u 四位的十六进制编码值 - 将编码值转化成对应字符

      • 二进制:bin()

      • 八进制:oct()

      • 十六进制:hex()

    str8 = '\tabc\n123'
    print(str8)
    
    # str9 = 'abc'123
    str9 = "abc'123"
    print(str9)     # abc'123
    
    # str10 = "abc"123"
    str10 = 'abc"123'
    print(str10)    # abc"123
    
    str11 = 'abc\"123\'456'
    print(str11)    # abc"123'456
    
    str12 = 'abc\\n123'
    print(str12)   # abc\n123
    
    str13 = 'abc\u4e80123'
    print(str13)   # abc亀123
    

四、字符编码

1.字符在计算中的存储问题

  • 计算机只能存数字,所以为了能够保存字符,给每一个字符对应一个固定的数字,每次需要保存字符的时候直接保存字符对应的那个数字
  • 一个符号对应的那个固定的数字就是这个字符的编码值
  1. 编码表

    • 记录字符和编码值之间一一对应关系的表,常见的编码表有两种:ASCII码表和Unicode编码表
    1. ASCII码表
    • 总共有128个字符
    • 表中,数字字符在大写字母的前面,小写字母在大写字母的后面,大小写字母之间有其他符号。
    1. Unicode编码表
    • Unicode编码表是对ASCII码表的扩充,它记录了世界上所有的国家所有的民族所有的语言的所有符号
      中文的编码范围:4e00 ~ 9fa5
  2. 编码值的使用

    1. \u编码值(4位的16进制)
    print('\u4e11')  # 丑
    
    1. chr(编码值) - 获取编码值对应的字符
    # 中文
    for x in range(0x4e00, 0x9fa5):
        print(chr(x), end=" ")
    

    3)ord(字符) - 获取字符对应的编码值

    print(hex(ord('大')), hex(ord('傻')), hex(ord('蛋')))
    

    4)字符串比较大小
    比较第一对不相等的字符的编码值的大小。(两个字符串同位置上的字符是一对)

    print('abc' > 'ABCDEF')  # True
    print('abcd' > 'acdb')   # False
    
    print('你好' > 'hello')  # True
    
  • 数字字符: ‘0’ <= char <= ‘9’
  • 大写字母: ‘A’ <= char <= ‘Z’
  • 小写字母: ‘a’ <= char <= ‘z’
  • 字母: ‘A’ <= char <= ‘Z’ or ‘a’ <= char <= ‘z’

注意:中文Unicode编码范围:’\u4e00’ <= char <= ‘\u9fa5’

​ 5)字符串获取字符和列表获取元素的语法一样

str1 = 'abcde'
print(str1[-1], str1[0])    # e a
print(str1[1:])             # bcde
for x in str1:
    print(x, end=" ")       # a b c d e

password = input("请输入密码(字母和数字组成):")
for x in password:
    if '0' <= x <= '9' or 'A' <= x <= 'Z' or 'a' <= x <= 'z':
        continue
    else:
        print("不合法")
        break
else:
    print("合法")
相关标签: python基础 python