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

第二周 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('合法密码!')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Python元组和集合有以下几点区别。首先,元组是有序的,可以通过索引来访问元素,而集合是无序的,无法通过索引来访问元素。其次,元组中的元素可以重复,而集合自带去重功能,元素不可重复。另外,元组中的元素值不可修改,但可以通过切片来获取指定的元素,而集合中的元素是可修改的,可以添加或删除元素。总结来说,元组适合在需要保持数据顺序且不可修改的情况下使用,而集合适合在需要去重或对元素进行动态修改的情况下使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python元组和集合](https://blog.csdn.net/Betterc5/article/details/82027284)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [python元组tuple和集合set的三类区别](https://blog.csdn.net/weixin_47378963/article/details/130356374)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值