Python零基础入门学习08:容器数据类型:集合类型

:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。

集合类型定义

集合是多个元素的无序组合,与数学中集合的概念一致(即具备互异性无序性)。所谓互异性,是指集合中的每一个元素都是独一无二的,集合中不存在两个相同的元素。跟字典中的键一样,集合中的元素须是不可变数据类型

集合的建立

集合用大括号{}表示,元素间用逗号隔开。

建立集合类型用{}或set()。

建立空集合类型,必须使用set()。不能用{}。这是因为,用{}定义的是字典类型的空字典,而用set()才能定义集合类型的空集合。如下所示:

a = set()
b = {}
print("a的类型为", type(a))  # 集合类型。
print("b的类型为", type(b))  # 字典类型。

<<<
a的类型为 <class 'set'>
b的类型为 <class 'dict'>
<<<
可变数据类型和不可变数据类型

可变数据类型有:list,dict,set。

不可变数据类型有:int,float,string,tuple,range()。

值得注意的是,虽然字典的键和集合中的元素要求是不可变数据类型,但是字典和集合本身都是可变数据类型。

两种方法建立集合类型的例子如下:

A = {"python", 123, ("python", 123)} #使用{}建立集合
B = set("pypy123")     #使用set{}建立集合
print("A =", A)
print("B =", B)

<<<
A = {123, 'python', ('python', 123)}
B = {'3', '2', 'p', 'y', '1'}
<<<
集合的操作符及运算

集合有6个基本操作符和4个增强操作符。

集合有6个基本操作符如下:

基本操作符及应用 运算说明 描述
S | T 并集 返回一个新集合,包括在集合S和T中的所有元素
S - T 差集 返回一个新集合,包括在集合S但不在T中的元素
S & T 交集 返回一个新集合,包括同时在集合S和T中的元素
S ^ T 对称差 返回一个新集合,包括集合S和T中的非相同元素
S<=T或S<T 包含于 返回True/False,判断S和T的子集关系
S>=T或S>T 包含 返回True/False,判断S和T的包含关系

集合的4个增强操作符如下:

增强操作符及应用 描述
S |= T 更新集合S,包括在集合S和T中的所有元素
S -= T 更新集合S,包括在集合S但不在T中的元素
S &= T 更新集合S,包括同时在集合S和T中的元素
S ^= T 更新集合S,包括集合S和T中的非相同元素

交集判定

S1.isdisjoint(S2):S1与S2的集合交集是否为空,True为空,否则False。

集合运算的例子如下:

A = {"p", "y", 123}
B = {"1", "2", "3", "p", "y"}
print("A - B =", A - B) #A-B返回包含在A中,但不包含在B中的元素构成的集合。
print("B - A =", B - A) #B-A返回包含在B中,但不包含在A中的元素构成的集合。
print("A & B =", A & B) #A&B是交集运算,返回同时包含在A和B中的元素构成的集合。
print("A | B =", A | B) #A|B是并集运算,返回包含在A和B中的所有元素构成的集合。
print("A ^ B =", A ^ B) #A^B是对称差运算,返回A和B中的所有非相同元素构成的集合。

<<<
A - B = {123}
B - A = {'2', '1', '3'}
A & B = {'p', 'y'}
A | B = {'3', '2', 'p', 'y', '1', 123}
A ^ B = {'3', '2', '1', 123}
<<<
集合的操作方法或函数

设S为一个集合。

增长集合

S.add(elem)——添加一个元素(必须是不可变数据)。

S.update(Set)——批量添加其它集合中的所有元素。

缩减集合

S.remove(elem)——从集合中移除元素elem。如果elem不存在于集合中则会引发 KeyError。

S.discard(elem)——如果元素elem存在于集合中则将其移除。如果elem不存在,并不会报错。

S.pop()——从集合中移除并返回任意一个元素。 如果集合为空则会引发 KeyError。

S.clear()——从集合中移除所有元素。

下面是集合的增长和缩减的方法或函数的一些例子:

S = {'a', 'b', 'c'}
#集合添加元素。

S.add('d')  #集合S添加一个元素。

S
Out[54]: {'a', 'b', 'c', 'd'}

S1 = {'e', 'f'}

S.update(S1)  #批量添加集合S1中的所有元素到集合S中。

S
Out[57]: {'a', 'b', 'c', 'd', 'e', 'f'}

#集合缩减元素。
S.remove('f')  #.remove(elem)移除单个元素elem。

S.remove('g')  #.remove(elem)移除的元素elem不存在时会报错。
Traceback (most recent call last):

  File "<ipython-input-59-d161f40a2bc5>", line 1, in <module>
    S.remove('g')

KeyError: 'g'


S.discard('e')  #.discard(elem)移除单个元素,同.remove(elem)。

S.discard('g')  #.discard(elem)移除的元素elem不存在时,不会报错。与.remove(elem)不同。

S.pop()  #随机移除S集合中的任意一个元素。
Out[62]: 'a'

S.pop()
Out[63]: 'c'

S
Out[64]: {'b', 'd'}

S.clear()  #一次性清空集合S中的所有元素。

S
Out[66]: set()

集合大小:len函数。

S = {1, 2, 3, 4, 'a', 'b', 'c', 'd'}

len(S)
Out[2]: 8

To be continued.

1月5日

Python零基础入门学习08:字符串的格式化

:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。

字符串类型的格式化

格式化是对字符串进行格式表达的方法
-字符串格式化使用.format()方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)

这里要用到的概念是“槽”。Python语言采用“槽”机制+format()来形成字符串的格式化。
“槽”用{}表示,只能放在字符串中。

print("{}:计算机{}的CPU占用率为{}%".format("2020-1-5", "C", 10))

<<<2020-1-5:计算机C的CPU占用率为10%

format()中对应的3个参数的顺序也是0,1,2。上述3个槽依次的默认顺序为0,1,2。因此输出如上。但是,实际上每个槽{}中是可以填写顺序index的,比如代码可以改写如下:

print("{1}:计算机{0}的CPU占用率为{2}%".format("2020-1-5", "C", 10))

<<<C:计算机2020-1-5的CPU占用率为10%

这时,槽的默认顺序被改写了,形成了上述实际输出。

槽{}的内部对格式化的配置方式为{<参数序号>: <格式控制标记>}。

<格式控制标记>有以下6种:

<填充>——用于填充的单个字符。

<对齐>——<是左对齐,>是右对齐,^是居中对齐。如果没有对齐符号,默认是左对齐。
<宽度>——槽设定的输出宽度。当宽度少于字符本身的长度时,以字符本身的长度为准。

<,>——数字的千位分隔符。

<.精度>——浮点数小数精度或字符串最大输出长度。

<类型>——类型分为int和float型两种。

整数类型:b(二进制型), c(unicode编码型), d(十进制型), o(八进制型), x(小写的十六进制型), X(大写的十六进制型),
浮点数类型:e(小e的科学计数法类型), E(大E的科学计数法类型), f(普通的浮点数类型), %(百分数浮点数类型)。

字符串格式化的代码实例

<格式控制标记>的前3种代码举例如下:

print("{0:=^20}".format("PYTHON"))
print("{0:*>20}".format("BIT"))
print("{:10}".format("BIT"))

<<<
=======PYTHON=======
*****************BIT
BIT         #字符串长度为10。
<<<

{0:=20}中,冒号“:”前面的“0”表示<参数序号>,“=”表示<填充>的字符串,“”表示<对齐>中的居中对齐,“20”表示<宽度>输出为20。

<格式控制标记>的后3种代码举例如下:

print("{0:,.2f}".format(12345.6789))
print("{0:b}, {0:c}, {0:d}, {0:o}, {0:x}, {0:X}".format(425))

<<<
12,345.68
110101001, Ʃ, 425, 651, 1a9, 1A9
<<<
print("{0:e}, {0:E}, {0:f}, {0:%}".format(3.14))

<<<3.140000e+00, 3.140000E+00, 3.140000, 314.000000%

To be continued.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容