一、运算符
1.算术运算符
假设变量a
的值是10
,变量b
的值是21
,则 -
运算符 | 描述 | 示例 |
---|---|---|
+ | 加法运算,将运算符两边的操作数增加。 | a + b = 31 |
- | 减法运算,将运算符左边的操作数减去右边的操作数。 | a – b = -11 |
* | 乘法运算,将运算符两边的操作数相乘 | a * b = 210 |
/ | 除法运算,用右操作数除左操作数 | b / a = 2.1 |
% | 模运算,用右操作数除数左操作数并返回余数 | b % a = 1 |
** | 对运算符进行指数(幂)计算 | a ** b ,表示10 的21 次幂 |
// | 地板除 - 操作数的除法,其结果是删除小数点后的商数。 但如果其中一个操作数为负数,则结果将被保留,即从零(向负无穷大)舍去 | 9//2 = 4 , 9.0//2.0 = 4.0 , -11//3 = -4 , -11.0//3 = -4.0 |
2.比较(关系)运算符
比较(关系)运算符比较它们两边的值,并确定它们之间的关系。它们也称为关系运算符。假设变量a
的值10
,变量b
的值是20
,则 -
运算符 | 描述 | 示例 |
---|---|---|
== | 如果两个操作数的值相等,则条件为真。 | (a == b) 求值结果为 false |
!= | 如果两个操作数的值不相等,则条件为真。 | (a != b) 求值结果为 true |
> | 如果左操作数的值大于右操作数的值,则条件成为真。 | (a > b) 求值结果为 false |
< | 如果左操作数的值小于右操作数的值,则条件成为真。 | (a < b) 求值结果为 true |
>= | 如果左操作数的值大于或等于右操作数的值,则条件成为真。 | (a >= b) 求值结果为 false |
<= | 如果左操作数的值小于或等于右操作数的值,则条件成为真。 | (a <= b) 求值结果为 true |
3.赋值运算符
假设变量a
的值10
,变量b
的值是20
,则 -
运算符 | 描述 | 示例 |
---|---|---|
= | 将右侧操作数的值分配给左侧操作数 | c = a + b 表示将a + b 的值分配给c |
+= | 将右操作数相加到左操作数,并将结果分配给左操作数 | c + = a 等价于c = c + a |
-= | 从左操作数中减去右操作数,并将结果分配给左操作数 | c -= a 等价于 c = c - a |
*= | 将右操作数与左操作数相乘,并将结果分配给左操作数 | c *= a 等价于 c = c * a |
/= | 将左操作数除以右操作数,并将结果分配给左操作数 | c /= a 等价于 c = c / a |
%= | 将左操作数除以右操作数的模数,并将结果分配给左操作数 | c %= a 等价于 c = c % a |
**= | 执行指数(幂)计算,并将值分配给左操作数 | c **= a 等价于 c = c ** a |
//= | 运算符执行地板除运算,并将值分配给左操作数 | c //= a 等价于 c = c // a |
4.逻辑运算符
Python语言支持以下逻辑运算符。假设变量a
的值为True
,变量b
的值为False
,那么 -
运算符 | 描述 | 示例 |
---|---|---|
and | 如果两个操作数都为真,则条件成立。 | (a and b) 的结果为False |
or | 如果两个操作数中的任何一个非零,则条件成为真。 | (a or b) 的结果为True |
not | 用于反转操作数的逻辑状态。 | not(a and b) 的结果为True 。 |
5.按位运算符
按位运算符执行逐位运算。 假设变量a = 60
; 和变量b = 13
; 现在以二进制格式,它们将如下 -
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
Python的内置函数bin()
可用于获取整数的二进制表示形式。
以下是Python语言支持位运算操作符 -
运算符 | 描述 | 示例 |
---|---|---|
& | 如果它存在于两个操作数中,则操作符复制位到结果中 | (a & b) 结果表示为 0000 1100 |
| | 如果它存在于任一操作数,则复制位。 | (a|b) = 61 结果表示为 0011 1101 |
^ | 二进制异或。如果它是一个操作数集合,但不是同时是两个操作数则将复制位。 | (a ^ b) = 49 (结果表示为 0011 0001 ) |
~ | 二进制补码,它是一元的,具有“翻转”的效果。 | (~a ) = -61 有符号的二进制数,表示为1100 0011 的补码形式。 |
<< | 二进制左移,左操作数的值由右操作数指定的位数左移。 | a << 2 = 240 (结果表示为 1111 0000 ) |
>> | 二进制右移,左操作数的值由右操作数指定的位数右移。 | a >> 2 = 15 (结果表示为0000 1111 ) |
6.成员运算符
Python成员运算符测试给定值是否为序列中的成员,例如字符串,列表或元组。 有两个成员运算符,如下所述 -
运算符 | 描述 | 示例 |
---|---|---|
in | 如果在指定的序列中找到一个变量的值,则返回true ,否则返回false 。 | - |
not in | 如果在指定序列中找不到变量的值,则返回true ,否则返回false 。 | - |
7.身份运算符
身份运算符比较两个对象的内存位置。常用的有两个身份运算符,如下所述 -
运算符 | 描述 | 示例 |
---|---|---|
is | 如果运算符任一侧的变量指向相同的对象,则返回True ,否则返回False 。 | |
is not | 如果运算符任一侧的变量指向相同的对象,则返回True ,否则返回False 。 | - |
8. 运算符优先级
下表列出了从最高优先级到最低优先级的所有运算符,如下所示 -
序号 | 运算符 | 描述 |
---|---|---|
1 | ** | 指数(次幂)运算 |
2 | ~ + - | 补码,一元加减(最后两个的方法名称是+@ 和-@ ) |
3 | * / % // | 乘法,除法,模数和地板除 |
4 | + - | |
5 | >> << | 向右和向左位移 |
6 | & | 按位与 |
7 | ^| | 按位异或和常规的“OR ” |
8 | <= < > >= | 比较运算符 |
9 | <> == != | 等于运算符 |
10 | = %= /= //= -= += *= **= | 赋值运算符 |
11 | is is not | 身份运算符 |
12 | in not in | 成员运算符 |
13 | not or and | 逻辑运算符 |
二、数据类型:
1、数字
int(整型)
def bit_length(self):
""" 返回表示该数字的时占用的最少位数 """
"""
int.bit_length() -> int
Number of bits necessary to represent self in binary.
>>> bin(37)
'0b100101'
>>> (37).bit_length()
6
"""
return 0
def __int__(self):
""" 转换为整数 """
""" x.__int__() <==> int(x) """
pass
#等价于 int(x)
2、字符串:str
字符串一旦创建之后就不能修改,若修改就会重新创建一个新的字符串。
(1)字符串常用方法:
1、upper(self) ---->将字符串中所有字母大写,不去管其它非字母字符。
参数:无
返回值:字符串
str1 = 'hello my name is 张'
print(str1.upper())
输出:
HELLO MY NAME IS 张
2、lower(self) ---->把全部字母字符转换成小写,不去管其它非字母字符。
参数:无
返回值:字符串
str1 = 'Zbuter'
print(str1.lower())
输出:
zbuter
3、swapcase(self) ---->将字符串中的大小写字符互换
参数:无
返回值:字符串
str1 = '张Zbuter'
print(str1.swapcase())
输出:
张zBUTER
4、count(self, sub, start=None, end=None) ---->计算字符串中从 start 开始到 end 结束 sub 出现的次数 start 默认是字符串开始 end 默认是字符串结束
参数:
sub:字符或字符串
start:开始的索引位置
end:结束的索引位置
返回值:字符串中sub出现的次数
hello = 'hello world'
print(hello.count('o'))
print(hello.count('o',6))
输出:
2
1
5、capitalize(self) ---->将字符串的首字母大写
参数:无
返回值:将字符串的首字母大写的字符串
name = 'zjs'
print(name.capitalize())
输出:
Zjs
6、casefold(self) 与 lower(self) ---->将字符串小写
参数:无
返回值:将字符串小写的字符串
name = 'ZJS'
print(name.lower())
print(name.casefold())
输出:
zjs
zjs
casefold(self) 与 lower(self)的区别是:
lower()
只对 ASCII 也就是 'A-Z'
有效,但是其它一些语言里面存在小写的情况就没办法了。文档里面举得例子是德语中'ß'
的小写是'ss'
(这个我也不懂)
7、center(self, width, fillchar=None) ---->将字符串居中用fillchar填充 一共width个字符 默认是使用空格填充 返回新的字符串
参数:
width:新形成的字符串长度,如果源字符串比width指定的长度长则直接返回源字符串
fillchar:指定一个字符来填充
返回值:填充后的字符串
name = 'ZJS'
print(name.center(20))
print(name.center(20, '-'))
输出:
ZJS
--------ZJS---------
8、ljust(self, width, fillchar=None) ---->返回一个长度为width,左对齐的字符串,最右边填充fillchar,默认为空格。width要大于len(str),否则返回原字符串。
str1 = 'Zbuter'
print(str1.ljust(20))
print(str1.ljust(20, '-'))
输出:
Zbuter
Zbuter--------------
9、rjust(self, width, fillchar=None) ---->与ljust类似 右对齐
10、lstrip(self, chars=None) ---->返回一个去除前导字符的新字符串,chars参数是一个字符串,它包含了所有将要被移除的字符集合。默认为空格。
参数:
chars:字符集合
返回值:字符串
str1 = ' www.zbuter.cn'
str2 = 'www.zbuter.cn'
print(str1.lstrip())
print(str2.lstrip('cnw.'))
输出:
www.zbuter.cn
zbuter.cn
11、rstrip(self, chars=None) ---->与lsplit类似 从右侧开始
12、strip(self, chars=None) ---->与lstrip和rstrip类似 在字符串两头开始匹配。多用于清除字符串两端的空格
13、endswith(self, suffix, start=None, end=None) ---->判断字符串是否以 suffix 结尾 start 默认是字符串开始 end 默认是字符串结束
参数:
suffix:后缀
start:开始的索引位置
end:结束的索引位置
返回值:布尔值
hello = 'hello world'
print(hello.endswith('ld'))
print(hello.endswith('asd'))
输出:
True
False
14、startswith(self, prefix, start=None, end=None) ---->与endswith类似 判断是否以prefix开头
15、expandtabs(self, tabsize=8) ---->把字符串中的 tab 符号('\t')转为空格,tab 符号默认的空格数是 8。从头开始数,数到第一个\t正好为8个空格,不足则补空格,如果还有\t,接着从第一个\t数到第二个\t仍然为8个空格,以此类推直到最后一个\t结束。
参数:
tabsize:指定转换字符串中的 tab 符号('\t')转为空格的字符数,默认的字符数是8。
返回值:该方法返回字符串中的 tab 符号('\t')转为空格后生成的新字符串。
hello = 'hello\tworld'
print(hello.expandtabs(4))
print(hello.expandtabs(10))
输出:
hello world
hello world
16、find(self, sub, start=None, end=None) ---->在字符串中查找 sub 出现的位置
参数:
sub:指定查找的字符串或字符
start:开始的索引位置
end:结束的索引位置
返回值:sub出现的第一次的索引 如果不存在则返回-1
hello = 'hello\tworld'
print(hello.find('o'))
print(hello.find('z'))
输出:
4
-1
17、rfind(self, sub, start=None, end=None) ---->与find类似 从右侧查找
18、index(self, sub, start=None, end=None) ---->在字符串中查找 sub 出现的位置
参数:
sub:指定查找的字符串或字符
start:开始的索引位置
end:结束的索引位置
返回值:sub出现的第一次的索引 如果不存在则抛出异常
hello = 'hello\tworld'
print(hello.index('o'))
print(hello.index('z'))
输出:
4
Traceback (most recent call last):
File "E:/zjs/Python/pythonTest/day01/day01/d1.py", line 36, in <module>
print(hello.index('z'))
ValueError: substring not found
19、rindex(self, sub, start=None, end=None) ---->与index类似 从右侧查找
20、title(self) ---->将字符串中所有单词的首字母大写
参数:无
返回值:字符串
str1 = 'hello my name is 张'
print(str1.title())
输出:
Hello My Name Is 张
21、replace(self, old, new, count=None) ---->用 new 替换原字符串中的 old ,count指定替换的次数
参数:
old:需要替换的字符(串)
new:替换的字符(串)
count:替换的次数不超过count次
返回值:字符串
str1 = 'www.zbuter.cn'
str2 = 'www.zbuter.cn'
print(str1.replace('.', '。'))
print(str2.replace('.', ',', 1))
输出:
www。zbuter。cn
www,zbuter.cn
22、partition(self, sep) ---->该方法用于拆分字符串,返回一个包含三个元素的元组。如果未能在原字符串中找到Sep,则元组的三个元素为:原字符串,空串,空串;否则,从原字符串中遇到的第一个Sep字符开始拆分,元组的三个元素为:Sep之前的字符串,Sep字符,Sep之后的字符串;
参数:
sep:分割标记
返回值:元祖
str1 = ' www.zbuter.cn'
str2 = 'www.zbuter.cn'
print(str1.partition('.'))
print(str2.partition('z'))
输出:
(' www', '.', 'zbuter.cn')
('www.', 'z', 'buter.cn')
23、rpartition(self, sep) ---->与partition类似 从右侧查找sep
24、split(self, sep=None, maxsplit=-1) ---->返回一个以Sep分隔的列表,maxsplit指定拆分次数(因此,列表中元素的个数为maxsplit + 1)。Sep默认为空格,maxsplit默认不限制拆分次数。
参数:
sep:分隔符
maxsplit:拆分次数
返回值:字符串
str1 = 'www.zbuter.cn'
str2 = 'www.zbuter.cn'
print(str1.split('.'))
print(str2.split('.', 1))
输出:
['www', 'zbuter', 'cn']
['www', 'zbuter.cn']
25、rsplit(self, sep=None, maxsplit=-1) ---->与 split 类似 从右侧拆分
26、splitlines(self, keepends=None) ---->拆分一个包含多行的字符串,以每行为一个元素返回一个列表 keepends是一个True字符或非零整数
参数:
keepends:是否在列表内也添加换行符
返回值:字符串
str1 = '123\n456'
str2 = '123\n456'
print(str1.splitlines())
print(str2.splitlines(True))
输出:
['123', '456']
['123\n', '456']
27、join(self, iterable) ---->使用连接符str来连接iterable对象中的元素,如果传入一个非iterable对象,如整数、布尔值等,将抛出异常Type Error。
参数:iterable:使用字符串来连接iterable
返回值:字符串
str1 = 'Zbuter'
print(str1.join('12'))
print(str1.join('123'))
print(str1.join(123))
输出:
1Zbuter2
1Zbuter2Zbuter3
Traceback (most recent call last):
File "E:/zjs/Python/pythonTest/day01/day01/d1.py", line 39, in <module>
print(str1.join(123))
TypeError: can only join an iterable
28、zfill(self, width) ---->返回一个长度为width的数字字符串,最左边填充0。如果width小于等于原字符串长度,则返回原字符串。主要用于数字类字符串的格式化。
参数:
width:填充的宽度
返回值:字符串
str1 = 'aaa'
str2 = '123'
print(str1.zfill(5))
print(str2.zfill(5))
输出:
00aaa
00123
29、format(self, *args, **kwargs) ---->格式化字符串
参数:
*args:是用来发送一个(非键值对)可变数量的参数列表给一个函数
**kwargs 允许你将不定长度的键值对, 作为参数传递给一个函数。 如果你想要在一个函数里处理带名字的参数, 你应该使用**kwargs。
返回值:格式化后的新字符串
str1 = 'my name is {name} age is {age}'
str2 = 'my name is {0} age is {1}'
print(str1.format(name = 'zjs', age = 12))
print(str2.format('zjs', 12))
输出:
my name is zjs age is 12
my name is zjs age is 12
更多参考:http://www.cnblogs.com/wupeiqi/articles/5484747.html
30、format_map(self, mapping) ----> 待更新
31、isalnum(self) ---->字符串中是否只含数字、字母
参数:无
返回值:布尔值
str1 = '123abc'
str2 = '123_abc'
print(str1.isalnum())
print(str2.isalnum())
输出:
True
False
32、isalpha(self) ---->字符串是否只含有字母
参数:无
返回值:布尔值
str1 = 'abcdef'
str2 = '_abc'
print(str1.isalpha())
print(str2.isalpha())
输出:
True
False
33、isdecimal(self) ---->字符串是否只包含十进制字符。这种方法只存在于unicode对象。
参数:无
返回值:布尔值
str1 = '123'
str2 = 'this123'
print(str1.isdecimal())
print(str2.isdecimal())
输出:
True
False
34、isdigit(self) ---->检测字符串是否只由数字组成。
参数:无
返回值:布尔值
str1 = '123'
str2 = 'this123'
print(str1.isdigit())
print(str2.isdigit())
输出:
True
False
35、isidentifier(self) ---->判断字符串是否是合法的标识符
参数:无
返回值:布尔值
str1 = '_a'
str2 = '1a'
print(str1.isidentifier())
print(str2.isidentifier())
输出:
True
False
36、islower(self) ---->判断字符串是否全是小写
参数:无
返回值:布尔值
str1 = 'abcdefg'
str2 = 'Abcdefg'
print(str1.islower())
print(str2.islower())
输出:
True
False
37、isnumeric(self) ---->判断字符串是否只包含数字字符。数字字符范围很大,一般来说,数字字符是拥有如下属性值的字符:Numeric_Type=Digit, Numeric_Type=Decimal或Numeric_Type=Numeric。比较isdecimal()、isdigit()、isnumeric(),几个方法检测的范围依次扩大。
参数:无
返回值:布尔值
str1 = '123'
str2 = 'a123'
print(str1.isnumeric())
print(str2.isnumeric())
输出:
True
False
38、isprintable(self) ---->判断字符串所包含的字符是否全部可打印
参数:无
返回值:布尔值
str1 = 'hello world'
str2 = 'hello\tworld'
print(str1.isprintable())
print(str2.isprintable())
输出:
True
False
39、isspace(self) ---->判断字符串是否仅包含空格或制表符
参数:无
返回值:布尔值
str1 = ' \t \n'
str2 = ''
print(str1.isspace())
print(str2.isspace())
输出:
True
False
40、istitle(self) ---->判断字符串每个单词的首字母是否大写
参数:无
返回值:布尔值
str1 = '张家顺'
str2 = 'Zbuter'
str3 = '张家顺Zbuter'
print(str1.istitle())
print(str2.istitle())
print(str3.istitle())
输出:
False
True
True
41、isupper(self) ---->与islower()相反 判断字符串是否全部大写
42、encode(self, encoding='utf-8', errors='strict') ---->
43、decode(self, *args, **kwargs) ---->
44、maketrans(self, *args, **kwargs)
45、translate(self, table)
maketrans 与 translate 配合使用
str = '30416657'
trans = str.maketrans('0123456789', '零一二三四五六七八九')
print(str.translate(trans))
输出:
三零四一六六五七
(2)字符串的索引:
str = 'zbuter'
print(str[0], str[1])
print(str[-1], str[-2]) # 负号代表在字符串后面数
输出:
z b
r e
str[0]代表字符串的第一个字符 以此类推
用于获取字符串中某一个字符
(3)字符串的切片:
str = 'zbuter'
print(str[0:2])
print(str[:2]) # 与 str[0:2] 含义相同
print(str[:-1]) # 表示从 0 到 最后一个字符(不含)
print(str[2:-1]) #从第二个字符到最后一个字符)(不含)
输出:
zb
zb
zbute
ute
(4)字符串的长度
str = 'zbuter'
print(len(str))
输出:
6
(5)字符串内字符的遍历
str1 = "hello my name is zjs"
for s in str1:
print(s)
输出:
h
e
l
l
o
m
y
n
a
m
e
i
s
z
j
s
3、列表:list
创建列表:
name_list = ['zhang', 'wang', 'li']
或
name_list = list(['zhang', 'wang', 'li'])
列表内的元素是有序的
(1)常用方法:
1.append(self, p_object) ---->在列表最后追加一个元素
参数:p_object 追加的元素
返回值:None
ls = [1, '2', 'abc']
s = ls.append(5)
print(ls)
print(s)
输出:
[1, '2', 'abc', 5] None
列表可以追加任意的数据类型。包括列表、元祖和字典。
2.clear(self) ---->清空字典
参数:无
返回值:None
ls = [1, '2', 'abc']
s = ls.clear()
print(ls)
print(s)
输出:
[]
None
3.copy(self) ---->字典的浅拷贝 只拷贝直接子对象
参数:无
返回值:列表
ls = [1, '2', 'abc']
s = ls.copy()
print(ls)
print(s)
ls = []
print(ls)
print(s)
输出:
[1, '2', 'abc'] [1, '2', 'abc'] [] [1, '2', 'abc']
4.count(self, value) ---->计算value在列表中出现的次数
参数:value 可以是任意类型
返回值:int类型的数字
ls = [1, '2', 'abc', 1, 1, 1]
s = ls.count(1)
print(ls)
print(s)
输出:
[1, '2', 'abc', 1, 1, 1] 4
5.insert(self, index, p_object) ---->在 index 处插入p_object
参数:
index: 索引位置
p_object:需要插入的元素
返回值:int类型的数字
ls = [1, '2', 'abc']
s = ls.insert(1, 4)
print(ls)
print(s)
ls.insert(4, 4) #插入如果超出了列表的索引范围则在最后一个位置插入
print(ls)
输出:
[1, 4, '2', 'abc'] None [1, 4, '2', 'abc', 4]
6.index(self, value, start=None, stop=None) ---->查找value从start开始到stop处出现的索引位置 如果不存在这个值会抛出异常
参数:
value: 需要查找的元素
start: 开始查找的索引位置 默认是列表的第一个元素
stop: 结束查找的索引位置 默认是列表的最后一个元素
返回值:int类型数字 value第一次出现的索引位置
ls = [0, '2', 'abc', 1, 1, 1]
s = ls.index(1, 2, 4)
print(s)
s = ls.index(1, 2, 3)
print(s)
输出:
3 Traceback (most recent call last): File "E:/zjs/Python/pythonTest/day01/day01/d1.py", line 69, in <module> s = ls.index(1, 2, 3) ValueError: 1 is not in list
7.extend(self, iterable) ---->在列表后追加一个可迭代的值
参数:iterable 追加的可迭代元素
返回值:None
ls = [0, '2', 'abc', 1, 1, 1]
ex = ['a', 'bc', 1, 3]
s = ls.extend(ex)
print(ls)
print(s)
输出:
[0, '2', 'abc', 1, 1, 1, 'a', 'bc', 1, 3] None
与append不同,
append一个列表是把列表整体追加到列表尾部,
extend则是一个一个追加到列表的末尾,
extend不接受数字类型,只能传递一个可迭代对象
8.pop(self, index=None) ---->删除列表中最后一个元素。若index指定则删除index处的元素
参数:index 删除的元素索引
返回值:None
ls = [0, '2', 'abc', 1, 1, 1]
ex = ['a', 'bc', 1, 3]
s = ls.pop()
print(ls)
print(s)
s = ls.pop(2)
print(ls)
print(s)
输出:
[0, '2', 'abc', 1, 1] 1 [0, '2', 1, 1] abc
9.remove(self, value) ---->从列表中删除第一个value匹配值
参数:value 需要删除的元素
返回值:None
ls = [0, '2', 'abc', 1, 1, 1]
s = ls.remove(1)
print(ls)
print(s)
输出:
[0, '2', 'abc', 1, 1] None
10.reverse(self) ---->将列表逆置
参数:None
返回值:None
ls = [0, '2', 'abc', 1, 1, 1]
s = ls.reverse()
print(ls)
print(s)
输出:
[1, 1, 1, 'abc', '2', 0] None
11.sort(self, key=None, reverse=False) ---->对列表进行排序 若reverse指定为True则为从大到小排序
参数:
key:待更新
reverse:排序方式 默认为升序排列
返回值:None
ls = [4, 1, 3, 6, 7, 2]
s = ls.sort()
print(ls)
print(s)
s = ls.sort(reverse=True)
print(ls)
print(s)
输出:
[1, 2, 3, 4, 6, 7] None [7, 6, 4, 3, 2, 1] None
(2)访问列表中的值:
使用索引的方式访问列表:
ls = ['baidu', 'souhu', 1995, 2018];
print("ls[0]: ", ls[0])
print("ls[1:5]: ", ls[1:5])
输出:
ls[0]: baidu ls[1:5]: ['souhu', 1995, 2018]
获得列表中第一个值和最后一个值。
ls = ['baidu', 'souhu', 1995, 2018];
name, *_, year = ls # *(星)代表name和year中间的所有元素的之赋值给 _(下划线)。
print(name)
print(_)
print(year)
输出:
baidu ['souhu', 1995] 2018
(3)列表的更新:
ls = ['baidu', 'souhu', 1995, 2018];
print("ls[3]: ", ls[3])
ls[3] = 1111
print("更新后的ls[3]: ", ls[3])
输出:
ls = ['baidu', 'souhu', 1995, 2018]; print("ls[3]: ", ls[3]) ls[3] = 1111 print("更新后的ls[3]: ", ls[3])
(4)列表元素的删除:
ls = ['baidu', 'souhu', 1995, 2018, 'test', 'hello', [1,2,3]]
del ls[2]
print(ls)
ls.remove(2018)
print(ls)
ls.pop()
print(ls)
ls.clear() #无论列表中有多少元素都全部删除
print(ls)
输出:
['baidu', 'souhu', 2018, 'test', 'hello', [1, 2, 3]] ['baidu', 'souhu', 'test', 'hello', [1, 2, 3]] ['baidu', 'souhu', 'test', 'hello'] []
(5)列表的操作符:
列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
如下所示:
Python 表达式 | 结果 | 描述 |
---|---|---|
len([1, 2, 3]) | 3 | 长度 |
[1, 2, 3] + [4, 5, 6] | [1, 2, 3, 4, 5, 6] | 组合 |
['Hi!'] * 4 | ['Hi!', 'Hi!', 'Hi!', 'Hi!'] | 重复 |
3 in [1, 2, 3] | True | 元素是否存在于列表中 |
for x in [1, 2, 3]: print(x, end=" ") | 1 2 3 | 迭代 |
(5)列表的遍历:
list1 = ['abc', 123, (1, 2), [22, 33, 44, "ttt"]]
for item in list1:
print(item)
输出:
abc 123 (1, 2) [22, 33, 44, 'ttt']
4、元祖:tuple
元祖的创建方法:
ages = (11, 22, 33, 44, 55)
或
ages = tuple((11, 22, 33, 44, 55))
元祖的元素是有序的。
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号,列表使用方括号。
(1)元祖常用方法:
1.count(self, value) ---->与列表中count函数相同
2.index(self, value, start=None, stop=None) ---->与列表中index函数相同
(2)元祖的访问:
tuple1 = ('baidu', 'souhu', 1995, 2018, 'test', 'hello', [1,2,3])
print(tuple1[1])
print(tuple1[2:4])
输出:
souhu
(1995, 2018)
获得元祖中第一个值和最后一个值。
ls =('baidu', 'souhu', 1995, 2018)
name, *_, year = ls # *(星)代表name和year中间的所有元素的之赋值给 _(下划线)。
print(name)
print(_) # 如果是元祖取出来的会是列表
print(year)
输出:
baidu ['souhu', 1995] 2018
(3)元祖的修改和删除:
元祖的直接子元素不能被修改和删除,但间接子元素可以被修改或删除
元祖只能被整体删除。
tuple1 = ('baidu', 'souhu', 1995, 2018, 'test', 'hello', [1,2,3])
tuple1[6][1] = 666
print(tuple1)
输出:
('baidu', 'souhu', 1995, 2018, 'test', 'hello', [1, 666, 3])
(4)元祖的运算符:
与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。
Python 表达式 | 结果 | 描述 |
---|---|---|
len((1, 2, 3)) | 3 | 计算元素个数 |
(1, 2, 3) + (4, 5, 6) | (1, 2, 3, 4, 5, 6) | 连接 |
('Hi!',) * 4 | ('Hi!', 'Hi!', 'Hi!', 'Hi!') | 复制 |
3 in (1, 2, 3) | True | 元素是否存在 |
for x in (1, 2, 3): print (x,) | 1 2 3 | 迭代 |
(5)元祖的遍历:
tuple1 = ('abc', 123, (1, 2), [22, 33, 44, "ttt"])
for item in tuple1:
print(item)
输出:
abc 123 (1, 2) [22, 33, 44, 'ttt']
5、字典:dict
字典的创建:
person = {"name": "zjs", 'age': 12} 或 person = dict({"name": "zjs", 'age': 12})
字典中的元素是无序的
(1)字典的常用方法:
1.clear(self) ---->清空字典内所有键值对与列表相同
参数:无
返回值:无
>>> aDict = {'name': 'zjs', 'age':12, 'sex':'male'}
>>> aDict.clear()
>>> print(aDict)
{}
2.copy(self) ---->对字典的浅拷贝与列表相同
参数:无
返回值:字典
>>> aDict = {'name': 'zjs', 'age':12, 'sex':'male'}
>>> bDict = aDict.copy()
>>> print(aDict,bDict)
{'sex': 'male', 'age': 12, 'name': 'zjs'} {'sex': 'male', 'age': 12, 'name': 'zjs'}
3.keys(self) ---->以列表方式返回字典的所有键
参数:无
返回值:dict_keys
>>> aDict = {'name': 'zjs', 'age':12, 'sex':'male'}
>>> print(aDict.keys())
dict_keys(['sex', 'age', 'name'])
4.values(self) ---->与keys类似,返回字典的所有值
参数:无
返回值:dict_values
>>> aDict = {'name': 'zjs', 'age':12, 'sex':'male'}
>>> print(aDict.values())
dict_values(['male', 12, 'zjs'])
5.items(self) ---->以列表的方式返回字典的键值对 每个键值对用元祖表示
参数:无
返回值:dict_items
>>> aDict = {'name': 'zjs', 'age':12, 'sex':'male'}
>>> print(aDict.items())
dict_items([('sex', 'male'), ('age', 12), ('name', 'zjs')])
6.get(self, k, d=None) ---->获得字典指定键的值
参数:
k:指定的键
d:如果指定键的值不存在时,返回该默认值值。
返回值:无
aDict = {'name': 'zjs', 'age': 12, 'sex': 'male'}
name = aDict.get('name')
grade = aDict.get('grade', 3)
print(name,grade)
输出:
zjs 3
7.update(self, E=None, **F) ---->添加指定字典到该字典内如果字典内有该键则更新这个值
参数:
E:传入字典
**F:传入若干关键字
返回值:无
aDict = {'name': 'zjs', 'age': 12, 'sex': 'male'}
aDict.update({'grade': 3}) #传入字典
print(aDict)
aDict.update(age = 5, six=6) #传入关键字
print(aDict)
输出:
{'sex': 'male', 'age': 12, 'name': 'zjs', 'grade': 3} {'six': 6, 'sex': 'male', 'age': 5, 'name': 'zjs', 'grade': 3}
8.pop(self, k, d=None) ---->删除字典中指定的 键值对 k和与其对应的value并返回这个键 若k不存在则返回指定的d
参数:
k:删除指定的k
d:若k不存在时候返回默认的d
返回值:数字/字符串/字典/列表/元祖/.../
aDict = {'name': 'zjs', 'age': 12, 'sex': 'male'}
a = aDict.pop('name')
print(a, aDict)
b = aDict.pop('grade',3)
print(b, aDict)
输出:
zjs {'sex': 'male', 'age': 12} 3 {'sex': 'male', 'age': 12}
9.popitem(self) ---->随机删除字典中的键值对(通常删除末尾键值对)
参数:无
返回值:元祖
>>> aDict = {'name': 'zjs', 'age': 12, 'sex': 'male'}
>>> aDict.popitem()
('sex', 'male')
>>> print(aDict)
{'name': 'zjs', 'age': 12}
10.setdefault(self, k, d=None) ---->设置k的缺省值如果d未指定则默认为None
参数:无
返回值:无
>>> aDict = {'name': 'zjs', 'age': 12, 'sex': 'male'}
>>> aDict.setdefault('a')
>>> print(aDict)
{'name': 'zjs', 'age': 12, 'sex': 'male', 'a': None}
11.fromkeys(*args, **kwargs) @staticmethod ---->fromkeys()为静态方法,可以不声明对象直接调用
参数:任意
返回值:字典
seq = ('name', 'age', 'sex')
dict = dict.fromkeys(seq)
print ("新的字典为 : %s" % str(dict))
dict = dict.fromkeys(seq, 10)
print ("新的字典为 : %s" % str(dict))
输出:
新的字典为 : {'age': None, 'name': None, 'sex': None} 新的字典为 : {'age': 10, 'name': 10, 'sex': 10}
(2)访问字典里的值
由于字典中的键值对是无序的。所以不能使用下标来访问字典内的值,只能通过键来查找所对应的值
aDict = {'name': 'zjs', 'age': 12, 'sex': 'male'}
print(aDict['name'])
print(aDict.get('age'))
输出:
zjs
12
使用get与索引方式访问字典的值的区别是:如果访问一个不存在的键使用索引方式会报错,而get方法不会报错。除非get方法中指定一个默认值,否则返回None
(3)修改字典里的值
字典的值只能通过键值来修改
aDict = {'name': 'zjs', 'age': 12, 'sex': 'male'}
aDict['name'] = 'zhang'
print(aDict)
输出:
{'sex': 'male', 'name': 'zhang', 'age': 12}
(4)删除字典的元素
aDict = {'name': 'zjs', 'age': 12, 'sex': 'male', 'grade': 3, 'six': 6}
del aDict['name'] #删除指定键的键值对 若键不存在则会抛出异常
print(aDict)
t1 = aDict.pop('six') #删除指定的key对应的键值对返回key对应的值,若指定的key不存在则返回指定的缺省值默认为None
print('删除的元素为:', t1)
print(aDict)
t2 = aDict.popitem() #随机删除一个 并返回删除的元素
print('删除的键为:', t2)
aDict.clear() #无论字典中有多少键值对都全部删除
print(aDict)
输出:
{'sex': 'male', 'age': 12, 'grade': 3, 'six': 6} 删除的元素为: 6 {'sex': 'male', 'age': 12, 'grade': 3} 删除的键为: ('sex', 'male') {}
(5)字典的遍历
1.通过键来遍历:
dict1 = {'name': 'zjs', 'age':12, 'sex':'male'}
for item in dict1:
print(item,dict1[item])
输出:
name zjs
sex male
age 12
等价于:
for item in dict1.keys():
print(item, dict1[item])
输出:
name zjs
age 12
sex male
2.只获取字典的值:
dict1 = {'name': 'zjs', 'age':12, 'sex':'male'}
for item in dict1.values():
print(item)
输出:
12
zjs
male
3.对字典的键值的获取:
dict1 = {'name': 'zjs', 'age':12, 'sex':'male'}
for key, value in dict1.items():
print(key, value)
输出:
sex male age 12 name zjs
(6)字典的特性
- 字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
- 两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值多次,只有最后一个值会被记住。
2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。
1.实例:
dict1 = {'name': 'zjs', 'Age': 7, 'name': 'zhang'}
print(dict1)
dict2 = {True: 'b', 1.0: 'a', 1: 'c'}
print(dict2)
输出:
{'name': 'zhang', 'Age': 7} {True: 'c'}
2.实例:
dict1 = {['Name']: 'zjs', 'Age': 12}
print (dict1)
输出:
Traceback (most recent call last): File "E:/zjs/Python/pythonTest/day01/day01/d1.py", line 73, in <module> dict1 = {['Name']: 'zjs', 'Age': 12} TypeError: unhashable type: 'list'
6、集合:set
集合(set)是一个无序的不重复元素的序列。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
set1 = {1,2,3,4,5,3,'a','zjs',(1,3,'q')}
或
set1 = set([1,2,3,4])
不可变集合使用frozenset():
frozenset1 = frozenset([1,2,3,4])
(1)集合的常用方法
等价操作符 | 说明 | |
所有集合类型 | ||
len(s) | 集合基数:集合s中元素个数 | |
set([obj]) | 可变集合工厂函数:ojb必须是支持迭代的,由obj中的元素创建集合,否则创建一个空集合 | |
frozenset([obj]) | 不可变集合工厂函数:执行方式好set()方法相同,但它返回的是不可变集合 | |
obj in s | 成员测试 | |
obj not in s | 非成员测试 | |
s == t | 等价测试 | |
s != t | 不等价测试 | |
s < t | (严格意义上)子集测试 | |
s.issubset(t) | s <= t | 子集测试 |
s > t | (严格意义上)超集测试 | |
s.issuperset(t) | s >= t | 超集测试 |
s.union(t) | s | t | 合并操作 |
s.intersec-tion(t) | s & t | 交集操作 |
s.difference(t) | s – t | 差分操作 |
s.symmetric_fifference(t) | s ^ t | 对称差分操作 |
s.copy() | 赋值操作:返回s的(浅复制)副本 | |
仅适用于可变集合 | ||
s.update(t) | s |= t | (Union)修改操作:将t中的成员添加s |
s.intersection_update(t) | s &= t | 交集修改操作:s中仅包括s和t中共有的成员 |
s.difference_update(t) | s -= t | 差修改操作:s中仅包括属于s但不属于t的成员 |
s.symmetric_difference_ update(t) | s ^= t | 对称差分修改操作:s中包括仅属于s或仅属于t的成员 |
s.add(obj) | 加操作:将obj添加到s | |
s.remove(obj) | 删除操作 | |
s.discard(obj) | 丢弃操作:remove()的友好版本,如果s中存在ojb,从s中删除它 | |
s.pop() | pop操作:移除并返回s中的任意一个值 | |
s.clear() | 清除操作:移除s中的所有元素 |
# set可以进行集合运算
a = set('zjs')
b = set('zhang')
print(a)
print(a - b) # a和b的差集
print(a | b) # a和b的并集
print(a & b) # a和b的交集
print(a ^ b) # a和b中不同时存在的元素
输出:
{'d', 'r', 'c', 'a', 'b'} {'b', 'r', 'd'} {'b', 'z', 'd', 'l', 'c', 'r', 'm', 'a'} {'c', 'a'} {'b', 'z', 'd', 'l', 'r', 'm'}
7、布尔值:bool
bool类型是int的子类
只有 True (真)和 False (假)两个值
只有 '' (空字符串)、""(空字符串)、None(空值)、0(数字零)、 0.0(浮点数0.0)、[](空列表)、()(空元祖)、{}(空字典)为False其余所有值都为True