本帖最后由 126xy 于 2022-10-18 19:55 编辑
一.集合
1.定义及基本操作
①增:add() 单个 ;update() 多个
②删:remove() 指定删除,不存在会报错;pop() 随机删除;discard() 指定删除,不存在不报错;clear() 清空
[Python] 纯文本查看 复制代码 # 集合 set
# 定义空集合
set1 = set()
print(type(set1))
my_set = (1, 2, 3) # 集合是无序的
print(my_set)
# 集合中的元素是唯一的
my_set1 = {3, 2, 1, 1, 2, 4}
print(my_set1)
# 集合的操作
# 增加元素
set1 = set()
# add()
set1.add("张三")
set1.add("李四")
print(set1)
# update() #update(集合) 列表
set2 = {"张三", "lisi", "王五"}
set1.update(set2)
list1 = [1, 2, 3, 4]
set1.update(list1)
tuple1 = ("a", "b", "c")
set1.update(tuple1)
print(set1)
# 删除
set1.remove("a")
print(set1)
# pop() 随机删,并返回该值。可以用一个变量var接受,再显示出来
# set1.pop()
# discard() 指定删,就算删一个不存在的,也不会报错
set1.discard("张飞")
print(set1)
# clear() 清空集合
set1.clear()
print("------->", set1)
2.集合操作练习
①产生10个1-20的随机数,去出里面的重复项
②键盘输入一个元素,将此元素从不重复的集合中删除
法1:用列表后再转成集合 法2:用集合
[Python] 纯文本查看 复制代码 """
练习:
1.产生10个1-20的随机数,去出里面的重复项
2.键盘输入一个元素,将此元素从不重复的集合中删除
"""
import random
list1 = [] #法1
set1 = set() #法2
for i in range(10): #法1
rand = random.randint(1, 20)
list1.append(rand)
set1.add(rand) #法2
# 类型转换
my_set = set(list1) #法1
print(my_set, f"集合的元素个数是:{len(my_set)}")
print(set1) #法2
3.集合运算符 (不支持+ *)
[Python] 纯文本查看 复制代码 set1 = {"A", "B0", "C2"}
set2 = {"A", "B0", "C2"}
print(set1, set2)
print(set1 == set2)
print(id(set1), id(set2))
print(set1 is set2)
# 不支持+和*
# set3 = set1 + set2 #TypeError: unsupported operand type(s) for +: 'set' and 'set'
# set1 * 2 #TypeError: unsupported operand type(s) for *: 'set' and 'int'
4.集合的差(-)交(&)并(|)
[Python] 纯文本查看 复制代码 set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 差
set3 = set1 - set2
set4 = set2 - set1
set3_1 = set1.difference(set2)
print(set3, set4)
print(set3_1)
# 交
set4 = set1 & set2
set5 = set1.intersection(set2)
print(set4)
print(set5)
# 并
set6 =set1 | set2
set7 =set1.union(set2)
print(set6)
print(set7)
# 对称差集 互相的差集 的并
result = (set1 | set2) - (set1 & set2)
result1 = set1.symmetric_difference(set2)
result2 = (set1 -set2) | (set2-set1)
print(result)
print(result1)
print(result2)
5.可变与不可变的数据类型
可变:id不变,值可以改变。有列表、字典(键只能是不可变类型)、集合
不可变:数字、字符串、元组
[Python] 纯文本查看 复制代码 # 数字,字符串,列表,元组,字典,集合
# 可变与不可变
# 可变: 如果一个变量的id保持不变,它对应的值是可以改变的
list1 = [] # 可变:列表、字典、集合
print(id(list1)) # 注意:字典的键只能是不可变类型
list1.append('a') # 用的一定是 方法 去操作,而非重新赋值
print(id(list1))
num1 = 100 # 不可变:数字、字符串、元组
print(id(num1))
num1 = 2700
print(id(num1))
6.数据类型转换
Python数据类型转换
二.高级变量类型练习
题目:文本分析。请分析出下段文字中单词的个数,出现频率最高的前5个单词以及这5个单词出现的次数。
思路:(1)将文本中所有单词转为小写。
(2)将单词分隔开。由于分隔符有空格和各种标点符号,所以可以将所有的标点符号用空格代替。然后用split()方法分隔成一个个单词。
(3)用“单词:次数”的格式将每个单词及对应的出现次数存储到字典中。
(4)排序方法有三:
①sorted()内置函数
②导入Collection库中的Counter()函数统计词频,再使用most_common方法查出出现频率最高的n个对象及出现的次数
③键值对互换存储到列表中,用列表排序后再键值对互换回字典
[Python] 纯文本查看 复制代码 """
文本分析。请分析出下段文字中单词的个数,出现频率最高的前5个单词以及这5个单词出现的次数。
提示:
(1)将文本中所有单词转为小写。
(2)将单词分隔开。由于分隔符有空格和各种标点符号,所以可以将所有的标点符号用空格代替。然后用split()方法分隔成一个个单词。
(3)用“单词:次数”的格式将每个单词及对应的出现次数存储到字典中。
"""
from collections import Counter # 法3:用Counter()函数,统计可迭代对象中每个元素出现的次数,并返回一个字典
string0 = "While many in China are taking high-speed trains back home for the upcoming Spring Festival, " \
"Zhong Nanshan, a renowned respiratory expert, rode the rails on Saturday to Wuhan, Hubei province, " \
"the epicenter of the viral pneumonia outbreak. Zhong, 84, who heads a National Health Commission expert " \
"panel conducting research on the new epidemic, was the first to confirm on Monday during an interview with " \
"China Central Television that the new coronavirus can be transmitted between humans. He advised people not to " \
"travel to and from Wuhan as he worked to combat the outbreak. Two photos circulated widely on social media by " \
"Guangzhou Daily showed Zhong taking a short break on the train and rushing to a hospital in Wuhan to learn about " \
"patients' conditions."
string1 = string0.lower() # 1小写
# print(string1)
p = [',', '.', '\'']
for i in p:
string1 = string1.replace(i, ' ')
# print(string1)
result2 = string1.split(" ") # 2分割
for i in range(result2.count('')):
result2.remove('')
# print(result2)
word_dict = {}
for j in result2:
word_dict[j] = result2.count(j) # 3计数
# print(word_dict)
# result3 = sorted(word_dict.items(), key=lambda x: x[1], reverse=True) # 排序 法1
# result4 = result3[:5]
# print(dict(result4))
word_list = [] # 排序 法2:将字典键值对互换,可以对键进行排序
for key, value in word_dict.items(): # 这里不用字典是因为字典的键不能重复,所以用列表
key, value = value, key
word_list.append((key, value))
# print(word_list)
word_list.sort(reverse=True) # 用列表排序后再把键值对互换回来
# print(word_list)
word_list2 = []
for key, value in word_list:
key, value = value, key
word_list2.append((key, value))
# print(dict(word_list2[:5]))
counter = Counter(word_dict) # 排序法3
ansdict = counter.most_common(5)
print(ansdict)
|