126xy 发表于 2022-10-18 19:37

Python学习——集合

本帖最后由 126xy 于 2022-10-18 19:55 编辑

一.集合
1.定义及基本操作
①增:add() 单个   ;update() 多个
②删:remove() 指定删除,不存在会报错;pop() 随机删除;discard() 指定删除,不存在不报错;clear() 清空
# 集合 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 =
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:用集合
"""
练习:
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.集合运算符   (不支持+ *)
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.集合的差(-)交(&)并(|)
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不变,值可以改变。有列表、字典(键只能是不可变类型)、集合
不可变:数字、字符串、元组
# 数字,字符串,列表,元组,字典,集合
# 可变与不可变
# 可变: 如果一个变量的id保持不变,它对应的值是可以改变的

list1 = []# 可变:列表、字典、集合
print(id(list1))    # 注意:字典的键只能是不可变类型
list1.append('a')   # 用的一定是 方法 去操作,而非重新赋值
print(id(list1))

num1 = 100# 不可变:数字、字符串、元组
print(id(num1))
num1 = 2700
print(id(num1))

6.数据类型转换




二.高级变量类型练习
题目:文本分析。请分析出下段文字中单词的个数,出现频率最高的前5个单词以及这5个单词出现的次数。
思路:(1)将文本中所有单词转为小写。         
          (2)将单词分隔开。由于分隔符有空格和各种标点符号,所以可以将所有的标点符号用空格代替。然后用split()方法分隔成一个个单词。
          (3)用“单词:次数”的格式将每个单词及对应的出现次数存储到字典中。
          (4)排序方法有三:
             ①sorted()内置函数
             ②导入Collection库中的Counter()函数统计词频,再使用most_common方法查出出现频率最高的n个对象及出现的次数
             ③键值对互换存储到列表中,用列表排序后再键值对互换回字典
"""
    文本分析。请分析出下段文字中单词的个数,出现频率最高的前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 = result2.count(j)# 3计数
# print(word_dict)

# result3 = sorted(word_dict.items(), key=lambda x: x, 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)


allhope 发表于 2022-10-19 06:35

谢谢楼主,期待更好的作品!

yun520530 发表于 2022-10-19 08:59

谢谢分享刚好在学习python

lansemeiying 发表于 2022-10-19 09:02

刚需啊,感谢奉献

tabirs 发表于 2022-10-19 09:07

学习了谢谢

sexbomb 发表于 2022-10-19 15:58

正在慢慢看python,感觉没啥动力,语法很枯燥,偶尔还是来看看

Daoying 发表于 2022-10-20 10:41

感谢楼主分享,一起进步
页: [1]
查看完整版本: Python学习——集合