第二周 Day 4 —— Python元组和集合

本文详细介绍了Python中的元组、集合和字符串的特性与操作,包括它们的定义、操作方法以及在实际编程中的应用。元组是不可变的有序序列,集合是可变的无序且唯一元素的容器,字符串是不可变的字符序列。文中还展示了如何进行元组的解包、集合的数学运算以及字符串的转义字符和编码值的使用。此外,通过实例展示了如何利用集合解决实际问题,如统计选课学生的数量和分布情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二周 Day 8 —— 元组和集合

一、元组

1.什么是元组

​ 元组是容器(序列),将()作为容器的标志,里面多个元组用逗号隔开:(元素1,元素2,元素3,…)。

  • 不可变的(不支持增、删、改)
  • 有序的(支持下标操作)
  • 元素的要求和列表一样

元组就是不可变的列表

tuple1 = (10, 20, True, '123', [10, 20], {'a': 100})
print(tuple1, type(tuple1))           # (10, 20, True, '123', [10, 20], {'a': 100}) <class 'tuple'>
2. 查

​ 列表获取元素的方法,元组都支持。

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

    t3 = (10)
    print(t3, type(t3))         # 10 <class 'int'>
    
    t3 = (10,)
    print(t3, type(t3))         # (10,) <class 'tuple'>
    
  2. 在没有歧义的情况下,元组的小括号可以省略。(直接将多个元素用逗号隔开,也是表示一个元素)

    t4 = 10, 20, 30, 40
    print(t4, type(t4))         # (10, 20, 30, 40) <class 'tuple'>
    
  3. 可以通过让变量的个数和元组中元素的个数保持一致,来获取元组中的每个元素。(列表也可以用)

    point = (10, 20)
    x, y = point
    print(x, y)   # 10 20
    
  4. 变量也可以比元组中的个数少,但是必须在其中一个变量前面加上*,取值的时候先让不带*的按顺序先取,剩下的元素以列表的形式返回给带*的变量。

    t5 = ('小明', 18, 59, 89, 98, 78, 100)
    x1, x2, *x3 = t5
    print(x1, x2, x3)           # 小明 18 [59, 89, 98, 78, 100]
    

二、集合set

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

1. 集合的特点
  • 可变的
  • 无序
  • 元素的要求:不可变的、唯一的
  1. 空集合
s1 = set()
print(type(s1), len(s1))        # <class 'set'> 0
  1. 元素不可变
s2 = {10, True, 'abc', (1, 2)}
print(s2)                            # {'abc', True, 10, (1, 2)}

s3 = {10, True, 'abc', [1, 2]}       # 报错
  1. 集合无序
print({1, 2, 3} == {1, 3, 2})        # True
  1. 元素唯一
s3 = {1, 2, 3, 1, 1, 2, 2, 5, 6, 5}
print(s3)                            # {1, 2, 3, 5, 6}

scores = [89, 89, 48, 78, 91, 78, 89]
new_scores = list(set(scores))
print(new_scores)                    # [48, 89, 91, 78]

集合自带去重功能

2. 数学集合运算:交集、并集、差集、对称差集
  1. 交集&

    求两个集合的公共部分

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

    合并两个集合

    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}
    
  3. 差集-

    集合1-集合2 -> 集合1中除了包含在集合2中以外的部分

    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}
    
  4. 对称差集^

    两个集合合并然后去掉公共部分

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

练习:用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
e. 求选了三门学生的学生的数量和对应的名字

#a.
human_sum = python | java | h5
print(len(human_sum))                 # 11   
#b.
first_subject = python - java - h5
print(len(first_subject), first_subject)                  # 2 {'stu5', 'stu6'}
#c.
one_subject = (python ^ java ^ h5) - (python & java & h5)
print(len(one_subject), one_subject)  # 5 {'stu5', 'stu2', 'stu6', 'stu9', 'stu3'}
#d.
two_subjects = ((python & java) | (python & h5) | (java & h5)) - (python & java & h5)
print(len(two_subjects), two_subjects)                    # 4 {'stu4', 'stu7', 'stu1', 'stu11'}
#e.
three_subject = python & java & h5
print(len(three_subjects), three_subjects)                  # 2 {'stu10', 'stu8'}

三、字符串

1. 什么是字符串str

​ 字符串是容器(序列),将''""''' '''""" """作为容器的标志,在引号中的每一个符号都是字符串的元素(字符串的元素又叫字符)。

  1. ''""没有区别

    str1 = 'abc'
    str2 = "abc"      # str1和str2一样
    
  2. ''' '''""" """没有区别

    str1 = '''abc'''
    str2 = """abc"""  # str1和str2一样
    

注意:''""引起来的字符串内容不能通过回车换行,''' '''""" """引起来的字符串内容可以直接通过回车换行。

2. 字符串的特点
  • 不可变(所有字符串相关的可变操作,全部都是会产生一个新的字符串)
  • 有序的
  1. 字符串的元素(字符)

    通过任何手段可以放入引号中的符号都可以是字符串的元素。

3. 字符

​ 分为普通字符转义字符两种

  • 普通字符

    除了转义字符以外的字符都是普通字符。

  • 转义字符

    在一些特定符号前加\,在字符串中表示一些具有特殊功能或者特殊意义的符号。

转义字符意义
\n换行
\t水平制表符(相当于按一次tab键)
\’表示一个单引号
\"表示一个双引号
\\表示一个反斜杠
\u+16位进制数的编码值将编码值转换成对应的字符
str1 = 'abc\'123\"456\\n789'
print(str1)              # abc'123"456\n789

str2 = '\u4e00123456'
print(str2)              # 亀123456

四、字符编码

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

​ 计算机只能存数字,所以为了能够保存字符,给每一个字符对应一个固定的数字。每次需要保存字符的时候直接保存字符对应的那个数字。

​ 一个字符对应的那个固定的数字就是这个字符的编码值。

2. 编码表

​ 记录字符和编码值之间一一对应关系的表,常见的编码表有两种:ASCII码表,Unicode编码表。

  • ASCII码表

    • 总共有128个字符。
    • 表中,数字字符在大写字母前面,大写字母在小写字母前面,大写字母和小写字母之间有其他字母。
  • Unicode编码表

    • Unicode编码表是对ASCII码表的扩充,它记录了世界上所有的国家所有的民族所有的语言的所有符号。
    • 中文的编码范围:4e00 ~ 9fa5
3. 编码值的使用
  1. \u编码值(4位16进制)
print('\u4e01')                   # 丁
print('\u9e01')                   # 鸁
  1. chr(编码值)

    获取编码值对应的字符

# 打印汉字
for x in range(0x4e00, 0x9fa5 + 1):
    print(chr(x), end=" ")
  1. ord(字符)

    获取字符的编码值

print(ord('杨'), ord('凯'))                # 26472 20975
print(hex(ord('杨')), hex(ord('凯')))      # 0x6768 0x51ef
  1. 字符串比较大小

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

print('abc' > 'ABCDEF')                   # True
print('abc' > 'acABC')                    # False
print('你好' > 'hello')                    # True

数字字符:‘0’ <= char <= ‘9’

大写字母:‘A’ <= char <= ‘Z’

小写字母:‘a’ <= char <= ‘z’

中文:’\u4e00’ <= char <= ‘\u9fa5’

pw = input('请输入密码(字母和数字组成):')
for c in pw:
    if not ('0' <= c <= '9' or 'A' <= c <= 'Z' or 'a' <= c <= 'z'):
        print('密码不合法!')
        break
else:
    print('合法密码!')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值