接上条————
创建set集合
- 使用 {} 创建
在 Python 中,创建 set 集合可以像列表、元素和字典一样,直接将集合赋值给变量,从而实现创建集合的目的,其语法格式如下:
setname = {element1,element2,…,elementn}
其中,setname 表示集合的名称,起名时既要符合 Python 命名规范,也要避免与 Python 内置函数重名。
举个例子:
a = {1,‘c’,1,(1,2,3),‘c’}
print(a)
运行结果为:
{1, ‘c’, (1, 2, 3)}
- set()函数创建集合
set() 函数为 Python 的内置函数,其功能是将字符串、列表、元组、range 对象等可迭代对象转换成集合。该函数的语法格式如下:
setname = set(iteration)
其中,iteration 就表示字符串、列表、元组、range 对象等数据。
例如:
set1 = set(“c.biancheng.net”)
set2 = set([1,2,3,4,5])
set3 = set((1,2,3,4,5))
print(“set1:”,set1)
print(“set2:”,set2)
print(“set3:”,set3)
运行结果为:
set1: {‘a’, ‘g’, ‘b’, ‘c’, ‘n’, ‘h’, ‘.’, ‘t’, ‘i’, ‘e’}
set2: {1, 2, 3, 4, 5}
set3: {1, 2, 3, 4, 5}
访问set集合元素,因为集合是无序的,所以不可以用下标进行访问,一般采用循环遍历方式进行访问。
删除set集合
和其他序列类型一样,手动函数集合类型,也可以使用 del() 语句。
集合中添加元素
set 集合中添加元素,可以使用 set 类型提供的 add() 方法实现,该方法的语法格式为:
setname.add(element)
其中,setname 表示要添加元素的集合,element 表示要添加的元素内容。
需要注意的是,使用 add() 方法添加的元素,只能是数字、字符串、元组或者布尔类型(True 和 False)值,不能添加列表、字典、集合这类可变的数据,否则 Python 解释器会报 TypeError 错误。
从set集合中删除元素
删除现有 set 集合中的指定元素,可以使用 remove() 方法,该方法的语法格式如下:
setname.remove(element)
使用此方法删除集合中元素,需要注意的是,如果被删除元素本就不包含在集合中,则此方法会抛出 KeyError 错误。比如说一个元素重复删除就报异常。
如果我们不想在删除失败时令解释器提示 KeyError 错误,还可以使用 discard() 方法,此方法和 remove() 方法的用法完全相同,唯一的区别就是,当删除集合中元素失败时,此方法不会抛出任何错误。
Python set集合做交集、并集、差集运算
还有python的各种方法:
python中frozenset 集合
set 集合是可变序列,程序可以改变序列中的元素;frozenset 集合是不可变序列,程序不能改变序列中的元素。set 集合中所有能改变集合本身的方法,比如 remove()、discard()、add() 等,frozenset 都不支持;set 集合中不改变集合本身的方法,fronzenset 都支持。
除了以上说的一些方法之外其他方法frozenset还是都一样的。
两种情况下可以使用 fronzenset:
当集合的元素不需要改变时,我们可以使用 fronzenset 替代 set,这样更加安全。
有时候程序要求必须是不可变对象,这个时候也要使用 fronzenset 替代 set。比如,字典(dict)的键(key)就要求是不可变对象。
s = {‘Python’, ‘C’, ‘C++’}
fs = frozenset([‘Java’, ‘Shell’])
s_sub = {‘PHP’, ‘C#’}
#向set集合中添加frozenset
s.add(fs)
print(‘s =’, s)
#向为set集合添加子set集合
s.add(s_sub)
print(‘s =’, s)
运行结果:
s = {‘Python’, frozenset({‘Java’, ‘Shell’}), ‘C’, ‘C++’}
Traceback (most recent call last):
File “C:\Users\mozhiyan\Desktop\demo.py”, line 11, in
s.add(s_sub)
TypeError: unhashable type: ‘set’
需要注意的是,set 集合本身的元素必须是不可变的, 所以 set 的元素不能是 set,只能是 frozenset。第 6 行代码向 set 中添加 frozenset 是没问题的,因为 frozenset 是不可变的;但是,第 10 行代码中尝试向 set 中添加子 set,这是不允许的,因为 set 本身是可变的。
python字符串常规操作
首先字符串拼接问题
之前介绍数据的时候就说过,一般字符串常量挨着存放输出的时候就会自动拼接。但是变量就必须用+,但是字符串常量当然也可以通过+进行拼接,所以最好还是统一用+。
Python字符串和数字的拼接
在很多应用场景中,我们需要将字符串和数字拼接在一起,而 Python 不允许直接拼接数字和字符串,所以我们必须先将数字转换成字符串。可以借助 str() 和 repr() 函数将数字转换为字符串。
str() 和 repr() 的区别:
str() 和 repr() 函数虽然都可以将数字转换成字符串,但它们之间是有区别的:
str() 用于将数据转换成适合人类阅读的字符串形式。
repr() 用于将数据转换成适合解释器阅读的字符串形式(Python 表达式的形式),适合在开发和调试阶段使用;如果没有等价的语法,则会发生 SyntaxError 异常。
s = “http://c.biancheng.net/shell/”
s_str = str(s)
s_repr = repr(s)
print( type(s_str) )
print (s_str)
print( type(s_repr) )
print (s_repr)
运行结果:
<class ‘str’>
http://c.biancheng.net/shell/
<class ‘str’>
‘http://c.biancheng.net/shell/’
本例中,s 本身就是一个字符串,但是我们依然使用 str() 和 repr() 对它进行了转换。从运行结果可以看出,str() 保留了字符串最原始的样子,而 repr() 使用引号将字符串包围起来,这就是 Python 字符串的表达式形式。
另外,在 Python 交互式编程环境中输入一个表达式(变量、加减乘除、逻辑运算等)时,Python 会自动使用 repr() 函数处理该表达式。
字符串访问
正常根据下标访问,前面也讲到过,从前从后都可以。
也可以截取访问:
url = ‘http://c.biancheng.net/java/’
#获取索引从3处22(不包含22)的子串
print(url[7: 22]) # 输出 zy
#获取索引从7处到-6的子串
print(url[7: -6]) # 输出 zyit.org is very
#获取索引从-7到6的子串
print(url[-21: -6])
#从索引3开始,每隔4个字符取出一个字符,直到索引22为止
print(url[3: 22: 4])
运行结果:
c.biancheng.net
c.biancheng.net
c.biancheng.net
pcaen
高级用法
url = ‘http://c.biancheng.net/java/’
#获取从索引5开始,直到末尾的子串
print(url[7: ])
#获取从索引-21开始,直到末尾的子串
print(url[-21: ])
#从开头截取字符串,直到索引22为止
print(url[: 22])
#每隔3个字符取出一个字符
print(url[:: 3])
运行结果:
c.biancheng.net/java/
c.biancheng.net/java/
http://c.biancheng.net
hp/bne.ta/
Python len()函数详解:获取字符串长度或字节数
a=‘http://c.biancheng.net’
len(a)
22
str1 = “人生苦短,我用Python”
len(str1.encode())
27
因为汉字加中文标点符号共 7 个,占 21 个字节,而英文字母和英文的标点符号占 6 个字节,一共占用 27 个字节。
python中split()函数
格式:
str.split(sep,maxsplit)
此方法中各部分参数的含义分别是:
str:表示要进行分割的字符串;
sep:用于指定分隔符,可以包含多个字符。此参数默认为 None,表示所有空字符,包括空格、换行符“\n”、制表符“\t”等。
maxsplit:可选参数,用于指定分割的次数,最后列表中子串的个数最多为 maxsplit+1。如果不指定或者指定为 -1,则表示分割次数没有限制
和Java以及其他语言类似,分割函数的用法都是差不多的。
在python当中需要注意的是,在未指定 sep 参数时,split() 方法默认采用空字符进行分割,但当字符串中有连续的空格或其他空字符时,都会被视为一个分隔符对字符串进行分割。
python当中的join()函数
join() 方法也是非常重要的字符串方法,它是 split() 方法的逆方法,用来将列表(或元组)中包含的多个字符串连接成一个字符串。
join() 方法的语法格式如下:
newstr = str.join(iterable)
此方法中各参数的含义如下:
newstr:表示合并后生成的新字符串;
str:用于指定合并时的分隔符;
iterable:做合并操作的源字符串数据,允许以列表、元组等形式提供。
【例 1】将列表中的字符串合并成一个字符串。
list = [‘c’,‘biancheng’,‘net’]
‘.’.join(list)
‘c.biancheng.net’
【例 2】将元组中的字符串合并成一个字符串。
dir = ‘’,‘usr’,‘bin’,‘env’
type(dir)
<class ‘tuple’>
‘/’.join(dir)
‘/usr/bin/env’
count()方法
count 方法的语法格式如下:
str.count(sub[,start[,end]])
此方法中,各参数的具体含义如下:
str:表示原字符串;
sub:表示要检索的字符串;
start:指定检索的起始位置,也就是从什么位置开始检测。如果不指定,默认从头开始检索;
end:指定检索的终止位置,如果不指定,则表示一直检索到结尾。
str = “c.biancheng.net”
str.count(’.’,1)
2
str.count(’.’,2)
1
find()方法
find() 方法用于检索字符串中是否包含目标字符串,如果包含,则返回第一次出现该字符串的索引;反之,则返回 -1。
语法格式和count()方法很像。
find() 方法的语法格式如下:
str.find(sub[,start[,end]])
此格式中各参数的含义如下:
str:表示原字符串;
sub:表示要检索的目标字符串;
start:表示开始检索的起始位置。如果不指定,则默认从头开始检索;
end:表示结束检索的结束位置。如果不指定,则默认一直检索到结尾。
Python 还提供了 rfind() 方法,与 find() 方法最大的不同在于,rfind() 是从字符串右边开始检索。
Python str ljust()、rjust() 和 center() 方法
python提供了 3 种可用来进行文本对齐的方法,
首先,**ljust()**方法:
ljust() 方法的功能是向指定字符串的右侧填充指定字符,从而达到左对齐文本的目的。
ljust() 方法的基本格式如下:
S.ljust(width[, fillchar])
其中各个参数的含义如下:
S:表示要进行填充的字符串;
width:表示包括 S 本身长度在内,字符串要占的总长度;
fillchar:作为可选参数,用来指定填充字符串时所用的字符,默认情况使用空格。
S = ‘http://c.biancheng.net/python/’
addr = ‘http://c.biancheng.net’
print(S.ljust(35))
print(addr.ljust(35))
输出结果为:
http://c.biancheng.net/python/
http://c.biancheng.net
与左对齐方式相同,rjust() 和 center() 方法也是一样的。此处就不做多余解释了。只不过一个是右对齐,一个是中心对齐的方式。他们的格式也是大同小异的。
Python startswith()和endswith()方法
此方法较为简单,只是检索字符串是否以指定字符串开头或者结尾,如果是返回 True;反之返回 False。格式如下:
str.startswith(sub[,start[,end]])
此格式中各个参数的具体含义如下:
str:表示原字符串;
sub:要检索的子串;
start:指定检索开始的起始位置索引,如果不指定,则默认从头开始检索;
end:指定检索的结束位置索引,如果不指定,则默认一直检索在结束。
endswith()也是一样的格式。
Python 中,为了方便对字符串中的字母进行大小写转换,字符串变量提供了 3 种方法,分别是 title()、lower() 和 upper()。
Python title()方法
title() 方法用于将字符串中每个单词的首字母转为大写,其他字母全部转为小写,转换完成后,此方法会返回转换得到的字符串。如果字符串中没有需要被转换的字符,此方法会将字符串原封不动地返回。
str = “c.biancheng.net”
str.title()
‘C.Biancheng.Net’
str = “I LIKE C”
str.title()
‘I Like C’
python中lower() 方法
lower() 方法用于将字符串中的所有大写字母转换为小写字母,转换完成后,该方法会返回新得到的字符串。如果字符串中原本就都是小写字母,则该方法会返回原字符串。
str = “I LIKE C”
str.lower()
‘i like c’
upper()方法也一样,需要注意的是,以上 3 个方法都仅限于将转换后的新字符串返回,而不会修改原字符串。
python字符串去空格
Python 中,字符串变量提供了 3 种方法来删除字符串中多余的空格和特殊字符,它们分别是:
strip():删除字符串前后(左右两侧)的空格或特殊字符。
lstrip():删除字符串前面(左边)的空格或特殊字符。
rstrip():删除字符串后面(右边)的空格或特殊字符。
Python 的 str
是不可变的(不可变的意思是指,字符串一旦形成,它所包含的字符序列就不能发生任何改变),因此这三个方法只是返回字符串前面或后面空白被删除之后的副本,并不会改变字符串本身。
上面大小写说的意思也是一样的。
strip() 方法用于删除字符串左右两个的空格和特殊字符,该方法的语法格式为:
str.strip([chars])
其中,str 表示原字符串,[chars] 用来指定要删除的字符,可以同时指定多个,如果不手动指定,则默认会删除空格以及制表符、回车符、换行符等特殊字符。
str = " c.biancheng.net \t\n\r"
str.strip()
‘c.biancheng.net’
str.strip(" ,\r")
‘c.biancheng.net \t\n’
str
’ c.biancheng.net \t\n\r’
并没有改变字符串本身的值,还有左右删除字符串那两个方法也都是一样的格式所以不再做表述了。
format格式化问题
在实际开发中,数值类型有多种显示需求,比如货币形式、百分比形式等,使用 format() 方法可以将数值格式化为不同的形式。
#以货币形式显示
print(“货币形式:{:,d}”.format(1000000))
#科学计数法表示
print(“科学计数法:{:E}”.format(1200.12))
#以十六进制表示
print(“100的十六进制:{:#x}”.format(100))
#输出百分比形式
print(“0.01的百分比表示:{:.0%}”.format(0.01))
输出结果为:
货币形式:1,000,000
科学计数法:1.200120E+03
100的十六进制:0x64
0.01的百分比表示:1%
还有许多格式化形式,具体用到的时候可以自己去查一下,在此没必要去总结了。
大家对字符串编码应该大多数回一直有疑问,在此我做个总结:
我们知道,最早的字符串编码是 ASCII 编码,它仅仅对 10 个数字、26 个大小写英文字母以及一些特殊字符进行了编码。ASCII 码做多只能表示 256 个符号,每个字符只需要占用 1 个字节。
随着信息技术的发展,各国的文字都需要进行编码,于是相继出现了 GBK、GB2312、UTF-8 编码等,其中 GBK 和 GB2312 是我国制定的中文编码标准,规定英文字符母占用 1 个字节,中文字符占用 2 个字节;而 UTF-8 是国际通过的编码格式,它包含了全世界所有国家需要用到的字符,其规定英文字符占用 1 个字节,中文字符占用 3 个字节。
重点来了,Python 3.x 默认采用 UTF-8 编码格式,有效地解决了中文乱码的问题
Python encode()方法
encode() 方法为字符串类型(str)提供的方法,用于将 str 类型转换成 bytes 类型,这个过程也称为“编码”。
encode() 方法的语法格式如下:
str.encode([encoding=“utf-8”][,errors=“strict”])
注意,格式中用 [] 括起来的参数为可选参数,也就是说,在使用此方法时,可以使用 [] 中的参数,也可以不使用:
decode()方法格式也是一样的,和 encode() 方法正好相反,decode() 方法用于将 bytes 类型的二进制数据转换为 str 类型,这个过程也称为“解码”。
字符串的方法还有很多,在此也不一一做介绍了,我们可以通过dir()方法来查看各个对象下面所属的方法,比如说dir(str)。还有help()方法可以查看各个方法的英文文档解释。比如说help(str.lower)。
python流程
首先if else流程这个其他大多数语言也都有,唯一不同的一点是:
f 表达式 1:
代码块 1
elif 表达式 2:
代码块 2
elif 表达式 3:
代码块 3
…//其它elif语句
else:
代码块 n
她的else if 格式为elif但是用法意义都是一样的。在判断是否符合条件,符合真假的情况:
布尔类型(bool)只有两个值,分别是 True 和 False,Python 会把 True 当做“真”,把 False 当做“假”。
对于数字,Python 会把 0 和 0.0 当做“假”,把其它值当做“真”。
对于其它类型,当对象为空或者为 None 时,Python 会把它们当做“假”,其它情况当做真。
在此强调一些python的缩进,Python 是以缩进来标记代码块的,代码块一定要有缩进,没有缩进的不是代码块。另外,同一个代码块的缩进量要相同,缩进量不同的不属于同一个代码块。
Python 要求代码块必须缩进,但是却没有要求缩进量,你可以缩进 n 个空格,也可以缩进 n 个 Tab 键的位置。
但是从编程习惯的角度看,我建议缩进 1 个 Tab 键的位置,或者缩进 4 个空格;它们两者其实是等价的,很多编辑器都可以将 Tab 键设置为 4 个空格,比如,IDLE 中默认 Tab 键就是 4 个空格。
pass关键字
Python 提供了一种专业的做法,就是空语句 pass。pass 是 Python 中的关键字,用来让解释器跳过此处,什么都不做。
有时候程序需要占一个位置,或者放一条语句,但又不希望这条语句做任何事情,此时就可以通过 pass 语句来实现。使用 pass 语句比使用注释更加优雅。
alert断言句
Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python 解释器会报 AssertionError 错误。格式为:assert + 表达式
while循环
其实和其他语言用法一样,python里面大多数用while来循环遍历列表元组等:
my_char=“http://c.biancheng.net/python/”
i = 0;
while i<len(my_char):
print(my_char[i],end="")
i = i + 1
结果:
http://c.biancheng.net/python/
for循环
for 循环的语法格式如下:
for 迭代变量 in 字符串|列表|元组|字典|集合:
代码块
格式中,迭代变量用于存放从序列类型变量中读取出来的元素,所以一般不会在循环中对迭代变量手动赋值;代码块指的是具有相同缩进格式的多行代码(和 while 一样),由于和循环结构联用,因此代码块又称为循环体。
数值运用
print(“计算 1+2+…+100 的结果为:”)
#保存累加结果的变量
result = 0
#逐个获取从 1 到 100 这些值,并做累加操作
for i in range(101):
result += i
print(result)
运行结果为:
计算 1+2+…+100 的结果为:
5050
遍历数组元组等
my_list = [1,2,3,4,5]
for ele in my_list:
print(‘ele =’, ele)
程序执行结果为:
ele = 1
ele = 2
ele = 3
ele = 4
ele = 5
元组也是一样
for循环遍历字典
默认是遍历keys()值,但是也可以遍历items()和values(),在此只给出默认的例子:
my_dic = {‘python教程’:“http://c.biancheng.net/python/”,
‘shell教程’:“http://c.biancheng.net/shell/”,
‘java教程’:“http://c.biancheng.net/java/”}
for ele in my_dic:
print(‘ele =’, ele)
程序执行结果为:
ele = python教程
ele = shell教程
ele = java教程
还有一些for和while之间的嵌套循环使用,也和其他语言的用法类似,以及break和continue关键字也是用法一致,在此就简单说一下,
break 语句可以立即终止当前循环的执行,跳出当前所在的循环结构。无论是 while 循环还是 for 循环,只要执行 break 语句,就会直接结束当前正在执行的循环体。注意如果是for+else循环会直接全部跳出,不执行for循环也不会再执行else里面代码块。
add = “http://c.biancheng.net/python/,http://c.biancheng.net/shell/”
#提前定义一个 bool 变量,并为其赋初值
flag = False
for i in range(3):
for j in add:
if j == ‘,’:
#在 break 前,修改 flag 的值
flag = True
break
print(j,end="")
print("\n跳出内循环")
#在外层循环体中再次使用 break
if flag == True:
print(“跳出外层循环”)
break
运行结果
http://c.biancheng.net/python/
跳出内循环
跳出外层循环
和 break 语句相比,continue 语句的作用则没有那么强大,它只会终止执行本次循环中剩下的代码,直接从下一次循环继续执行。