当前位置: 代码迷 >> 综合 >> Day8 元组,集合,字符串
  详细解决方案

Day8 元组,集合,字符串

热度:52   发布时间:2023-11-29 17:05:14.0

Day 8 元组,集合,字符串

1.元组

1. 什么是元组?(tuple)

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

2.元组作为容器的特点

1)不可变的(不支持增,删,改)

1.查:列表获取元素的方法元组都支持

t1 = (10, 20, 30,'True',[1,2],{
    'a':100})
print(t1,type(t1))   #(10, 20, 30, 'True', [1, 2], {'a': 100}) <class 'tuple'>t1 = (10, 20, 30,'True',[1,2],{
    'a':100})
print(t1[1])    # 20
print(t1[3:])   # ('True', [1, 2], {'a': 100})

2.元组特有的或者常用的一些操作

1)只有一个元素的元组:必须在唯一的元素后面加逗号

t2 = (10)  
print(t2, type(t2))   # 10 <class 'int'>(不是元组形式)
t2 = (10,)
print(t2, type(t2))    # (10,) <class 'tuple'>

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

t3 = (10.20.30)
print(t3, type(t3))
t4 = 10,20,30
print(t4, type(t4))

3)可以通过变量的个数和元组中元素的个数保持一致,来获取元组中的每个元素

point = (100, 'abc')
print(point[0], point[1])  # 100 abcx, y = point
print(x, y)    # 100 abc

如果变量个数比元组中元素少,要在其中一个变量前加星号,其他变量正常按顺序取值,剩下的元素以列表的形式返回给带星号的变量

t4 = (10, 'True', [1, 2], {
    'a':100})
x1, x2, *x3 = t4
print(x1, x2, x3)    # 10 True [[1, 2], {'a': 100}]t4 = (10, 'True', [1, 2], {
    'a':100})
*x1, x2, x3 = t4
print(x1, x2, x3)    # [10, 'True'] [1, 2] {'a': 100}

2)有序的(支持下标操作)

3)元素的要求和列表一样(元组就是不可变的列表)

2.集合

1.什么是集合?(set)

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

2.集合作为容器的特点

可变的,无序的

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

1.空集合

s1 = set()
print(type(s1),len(s1))  # <class 'set'> 0

2.证明集合中元素不可变

s1 = {
    10, True, 'abc', (1, 2)}
print(s1)                # {True, 10, (1, 2), 'abc'}
s2 = {
    10, True, 'abc', [1, 2]}
print(s2)               # TypeError: unhashable type: 'list'(报错)

3.集合无序

s1 = {
    10, True, 'abc', (1, 2)}
print(s1)                # {True, 10, (1, 2), 'abc'}

4.元素唯一

s3 = {
    1, 2, 3, 4, 1, 2, 3, 1, 2, 3}
print(s3)          # {1, 2, 3, 4}(自动去重)

5.集合自带去重功能

scores = [45, 67, 56, 78, 98, 45, 56]
new_scores =list(set(scores))
print(new_scores)       # [98, 67, 45, 78, 56]

3.数学集合运算:交集,并集,差集,对称差集,子集,真子集

1)交集(&)—求两个集合的公共部分

n1 = {
    1, 2, 3, 4, 5, 6,7}
n2 = {
    5, 6, 7, 8, 9}
result = n1 & n2
print(result)     # {5, 6, 7}

2)并集(|)------合并两个集合

n1 = {
    1, 2, 3, 4, 5, 6,7}
n2 = {
    5, 6, 7, 8, 9}
result = n1 | n2
print(result)   # {1, 2, 3, 4, 5, 6, 7, 8, 9}

3)差集(-)----集合1-集合2—> 集合1中除了包含在集合2中以外的部分

n1 = {
    1, 2, 3, 4, 5, 6, 7}
n2 = {
    5, 6, 7, 8, 9}
result = n1 - n2
print(result)    # {1, 2, 3, 4}

4)对称差集 (^) ——两个集合合并然后去掉公共部分

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

5)子集(>= ,<=) ----

s1 = {
    100, 200, 300, 400}
s2 = {
    1, 2}
print(s1>s2)      # False
s3 = {
    100, 200, 300, 400, 1, 2}
s4 = {
    1, 2}
print(s3>s4)      # True

6)真子集(>, <)

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

3.字符串

1.什么是字符串?

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

#写注释的时候最好用# ,否则就是字符串

2.’‘和""没有区别,’’’’’'和""""""也没有区别

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

str = 'abc' \'123'
str = """abd123"""

3.字符串作为容器的特点

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

2)有序的,支持下标操作(切片,遍历)

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

4.字符

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

1)普通字符

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

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

\n —— 换行

str = 'aba\n123'
print(str)    # aba# 123\t       ——水平制表符(相当于按一次Tab键)```py
str = 'aba\t123'
print(str)     # aba 123

\’ ——表示一个单引号

\" ——表示一个双引号

str = 'aba\'123\"87'
print(str)     # aba'123"87

\\ ——表示一个反斜杠(使反斜杠变得普通)

str = 'aba\\n123\\t87'
print(str)     # aba\n123\t87

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

str1 = 'abc\u4e80123'
print(str1)     # abc亀123

5.电脑中的字符编码

1.字符在计算机中的存储问题(编码值)

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

每个符号对应的固定数字就是这个字符的编码值

2.编码表

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

1)ASCII码表

总共有128(2**7)个字符,表中,数字字符在大写字母的前面,大写字母在小写字母的前面,大写字母和小写字母之间有其他字符

2)Unicode编码表

Unicode编码表对ASCII编码表进行了扩充,它记录了世界上所有国家,民族,语言的符号。

中文的编码范围:4e00 ~ 9fa5

3.编码值的使用

1)\u编码值(4位16进制值)

print('\u4e07')  # 万

2)char(编码值)------获取编码值对应的字符

for x in range(0x4e80, 0x4f00):print(chr(x), end = ' ')
# 亀 亁 亂 亃 亄 亅 了 亇 予 争 亊 事 二 亍 于 亏 亐 云 互 亓 五 井 亖 亗 亘 亙 亚 些 亜 亝 亞 亟 亠 亡 亢 亣 交 亥 亦 产 亨 亩 亪 享 京 亭 亮 亯 亰 亱 亲 亳 亴 亵 亶 亷 亸 亹 人 亻 亼 亽 亾 亿 什 仁 仂 仃 仄 仅 仆 仇 仈 仉 今 介 仌 仍 从 仏 仐 仑 仒 仓 仔 仕 他 仗 付 仙 仚 仛 仜 仝 仞 仟 仠 仡 仢 代 令 以 仦 仧 仨 仩 仪 仫 们 仭 仮 仯 仰 仱 仲 仳 仴 仵 件 价 仸 仹 仺 任 仼 份 仾 仿 

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

print(ord('贺'), ord('芳'))              # 36154 33459
print(hex(ord('贺')), hex(ord('芳')))    # 0x8d3a 0x82b3

4)字符串比较大小

print('abc' > 'ABCDEF')                # True

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