day08元组、字典、字符串
一、元组
-
什么是元组(tuple)
- 元组是容器(序列), 将()作为容器的标志,里面多个元素用逗号隔开:(元素1,元素2,元素3,。。。
- 不可变的(不支持增、删、改);有序的(支持下标)
- 元组的要求和列表一样(元组就是不可变的列表)
t1 = (10, 20, True, 'abc', ['a', 'b'], {'a': 10, 'b': 20}) print(t1, type(t1))
-
查
列表获取元素的方法元组都支持t2 = ('周一', '周二', '周三', '周四', '周五', '周六', '周天') print(t2[1]) # 周二 print(t2[-1]) # 周天 print(t2[::-1]) # ('周天', '周六', '周五', '周四', '周三', '周二', '周一') print(t2[-2:1:-1]) # ('周六', '周五', '周四', '周三') print(t2[:4:-1]) # ('周天', '周六')
-
元组的持有或者常用的一些操作
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'>
- 可以通过让变量的个数和元组中元素的个数保持一致,来获取元组中的每个元素
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'> 此不是空集合
-
空集合
s1 = set() print(type(s1), len(s1)) # <class 'set'> 0
-
元素不可变
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'
-
集合无序
print({1, 2, 3} == {2, 3, 1}) # True
-
元素唯一
s3 = {1, 2, 3, 3, 2, 3, 4} print(s3) # {1, 2, 3, 4}
-
集合自带去重功能
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'}
三、字符串
-
什么是字符串 (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)
-
-
字符
-
字符分为普通字符和转义字符两种。
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.字符在计算中的存储问题
- 计算机只能存数字,所以为了能够保存字符,给每一个字符对应一个固定的数字,每次需要保存字符的时候直接保存字符对应的那个数字
- 一个符号对应的那个固定的数字就是这个字符的编码值
-
编码表
- 记录字符和编码值之间一一对应关系的表,常见的编码表有两种:ASCII码表和Unicode编码表
- ASCII码表
- 总共有128个字符
- 表中,数字字符在大写字母的前面,小写字母在大写字母的后面,大小写字母之间有其他符号。
- Unicode编码表
- Unicode编码表是对ASCII码表的扩充,它记录了世界上所有的国家所有的民族所有的语言的所有符号
中文的编码范围:4e00 ~ 9fa5
-
编码值的使用
- \u编码值(4位的16进制)
print('\u4e11') # 丑
- 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("合法")
上一篇: day08 数字,字符串类型内置方法
下一篇: Day4_解析器和selenium