Python基础——基本数据类型3

Python3 集合

  集合(set)是一个无序不重复元素的序列。

  可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

  创建格式:

a = {1, 2, 3, "hi"}
print(a)  # 结果是:{1, 2, 3, 'hi'}
print(type(a))  # 结果是:<class 'set'>
b = set("Python")
print(b)  # 结果是:<class 'set'>
print(type(b))  # 结果是:<class 'set'>
集合创建
a = set("Python")
b = set("cpython")
# 集合a中包含元素
print(a - b)  # 结果是:{'P'}
# 集合a或b中包含的所有元素
print(a | b)  # 结果是:{'c', 'y', 'p', 'P', 'o', 'h', 'n', 't'}
# 集合a和b中都包含了的元素
print(a & b)  # 结果是:{'h', 't', 'y', 'o', 'n'}
# 不同时包含于a和b的元素
print(a ^ b)  # 结果是:{'P', 'p', 'c'}
交集并集等操作

  集合的基本操作

    添加元素

# 添加元素
a = set(("Python", "China", "hi"))
a.add("new")
print(a)  # 结果是:{'Python', 'China', 'new', 'hi'}
# 添加元素方法2,且参数可以是列表,元组,字典等
b = set("cnblogs")
b.update({1, 2, 3})
print(b)  # 结果是:{1, 2, 3, 'b', 'n', 'o', 'g', 'l', 'c', 's'}
b.update({"key", "value"})
print(b)  # 结果是:{1, 'c', 'b', 2, 3, 'o', 'key', 's', 'n', 'value', 'g', 'l'}
添加元素

    移除元素

#移除元素
a = set(("Python","China","Google"))
a.remove("China")
print(a) #结果是:{'Google', 'Python'}
#a.remove("Baidu")# 不存在会报错  KeyError: 'Baidu'
# 移除元素方法2  如果元素不存在,不会发生错误
b = set("Python")
b.discard("N")
print(b)
# 移除元素方法3 随机删除集合中的一个元素
b.pop()
print(b)# 结果是:{'t', 'h', 'n', 'o', 'y'}
移除元素

     计算集合元素个数

a = set("Python")
print(len(a))  # 结果是:6

    清空集合

a = set("Python")
a.clear()
print(a)  # 结果是:set()

     判断元素是否在集合中存在

a = set("Python")
print("y" in a)  # 结果是:True

collections

  collections模块在内置数据类型(dict、list、set、tuple)的基础上,还提供了几个额外的数据类型:ChainMap、Counter、deque、defaltdict、namedtuple和OrderedDict等。

  1. namedtuple:生成可以使用名字来访问元素内容的tuple子类
  2. deque:双端队列,可以快速的从另外一侧追加和推出对象
  3. Counter:计数器,主要用来计数
  4. OrderedDict:有序字典
  5. defaultdict:带有默认值的字典

  namedtuple

   命名元组有助于对元组每个位置赋予意义,并且让我们的代码有更好的可读性和自文档性。你可以在任何使用元组地方使用命名元组。在例子中我们会创建一个命名元组以展示为元组每个位置保存信息。

  

from collections import namedtuple

Point = namedtuple('Point', ["x", "y"])  # 定义命名元组
p = Point(10, 20)
print(p)  # 结果是:Point(x=10, y=20)
namedtuple

   deque  

   使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

   deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

from collections import deque

q = deque(["a", "b", "c"])
q.append("x")
q.appendleft("y")
print(q)  # 结果是:deque(['y', 'a', 'b', 'c', 'x'])
deque

  Counter

     Counter 作为字典(dict)的一个子类用来进行hashtable计数,将元素进行数量统计、计数后返回一个字典,键值为元素:值为元素个数

from collections import Counter

s = 'abcbcaccbbad'
l = ['a', 'b', 'c', 'c', 'a', 'b', 'b']
d = {'2': 3, '3': 2, '17': 2}
# Counter 获取各元素的个数,返回字典
print(Counter(s))  # 结果是:Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
print(Counter(l))  # 结果是:Counter({'b': 3, 'a': 2, 'c': 2})
print(Counter(d))  # 结果是:Counter({'2': 3, '3': 2, '17': 2})
Counter

  OrderedDict

  使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。如果要保持Key的顺序,可以用OrderedDict

from collections import OrderedDict

d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d)  # 结果是:{'a': 1, 'b': 2, 'c': 3}
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od)  # 结果是:OrderedDict([('a', 1), ('b', 2), ('c', 3)])
# 注意:OrderedDict的Key会按照插入的顺序排列,不是Key本身排序
OrderedDict

  defaultdict

  默认字典,是字典的一个子类,继承有字典的方法和属性,默认字典在进行定义初始化的时候可以指定字典值得默认类型:

import collections

dic = collections.defaultdict(dict)
dic['k1'].update({'k2': 'aaa'})
print(dic)  # 结果是:defaultdict(<class 'dict'>, {'k1': {'k2': 'aaa'}})
defaultdict

各种推导式

  推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。 共有三种推导:

  • 列表推导式
  • 集合推导式
  • 字典推导式 

  列表推导式

# 列表推导式
# list1 = [out_exp_res for out_exp in input_list if out_exp == 2]
# out_exp_res:                 列表生成元素表达式,可以是有返回值的函数。
# for out_exp in input_list:  迭代input_list将out_exp传入out_exp_res表达式中。
# if out_exp == 2:            根据条件过滤哪些值可以。
mul = [i for i in range(20) if i % 2 == 0]
print(mul)  # 结果是:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
列表推导式

   集合推导式

    它们跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}

set1 = {i for i in range(20) if i % 2 == 0}
print(set1)#结果是:{0, 2, 4, 6, 8, 10, 12, 14, 16, 18}
集合推导式

   字典推导式

Dict = ["Python","China","me"]
dictresult = {key:value for key,value in enumerate(Dict)}
print(dictresult)
字典推导式

猜你喜欢

转载自www.cnblogs.com/Ojia/p/9471919.html