Python第二天课程
创建列表的方式
list= [XX,XX]
或
list1 = list()使用list方法,将字符串或元祖创建为列表
列表名[其实位置:结束位置] 取列表中的特定元素
>>> name
['aa', 'cc', 'dd', 33, 4, 5, 6, 8]
>>> name[1:3]
['cc', 'dd']
如果从后向前取,则从-1开始
>>> name
['aa', 'cc', 'dd', 33, 4, 5, 6, 8]
>>> name[-5:-3]
[33, 4]
从一个位置取到列表结束
>>> name
['aa', 'cc', 'dd', 33, 4, 5, 6, 8]
>>> name[3:]
[33, 4, 5, 6, 8]
从开始取到一个位置
>>> name
['aa', 'cc', 'dd', 33, 4, 5, 6, 8]
>>> name[:3]
['aa', 'cc', 'dd']
默认情况下,每次取值步长为1,那么如果要改变步长,也就是如果要隔1个取一个,则
>>> name
['aa', 'cc', 'dd', 33, 4, 5, 6, 8]
>>> name[::2]
['aa', 'dd', 4, 6]
上面步长为2,则隔一个取一个,如果为3则隔两个取一个
列表名.copy //复制列表,但是如果是多维列表,则仅copy外层的列表,在层列表中内层列表的位置仅复制内存地址。因此如果新复制的列表中内层列表值变化,则新旧的表的内层列表值都会变化。
>>> name = [1,2,3,4,5,6]
>>> name1 = name.copy()
>>> name1
[1, 2, 3, 4, 5, 6]
>>> import copy
>>> name1 = name.copy()
>>> name
['aa', 'cc', 'dd', 33, 4, 5, 6, 8]
>>> name1.insert(1,["fs","dg",448])
>>>
>>>
>>> name
['aa', 'cc', 'dd', 33, 4, 5, 6, 8]
>>> name1
['aa', ['fs', 'dg', 448], 'cc', 'dd', 33, 4, 5, 6, 8]
>>> name2 = copy.deepcopy(name1)
>>> name2
['aa', ['fs', 'dg', 448], 'cc', 'dd', 33, 4, 5, 6, 8]
>>>
>>>
>>>
>>> name2[1][1]= "ss"
>>> name1
['aa', ['fs', 'dg', 448], 'cc', 'dd', 33, 4, 5, 6, 8]
>>> name2
['aa', ['fs', 'ss', 448], 'cc', 'dd', 33, 4, 5, 6, 8]
>>>
如果要将内层列表也复制,则应该是使用标准库copy
import copy
name1 = copy.deepcopy(name),这样name1的值就会完全复制name列表,改变name1不会影响name列表
列表名.reverse ()翻转列表内的元素,例如原来是 [1,2,3,4],翻转后变成[4,3,2,1],会改变源列表
>>> name
[6, 5, 4, 3, 2, 1]
>>> name.reverse()
>>> name
[1, 2, 3, 4, 5, 6]
列表名.remove(列表中的元素) ,删除列表中出现的第一个元素内容,会改变源列表
>>> name
['aa', 'cc', 'dd', 33, 4, 8, 5, 6, 8]
>>> name.remove(8)
>>> name
['aa', 'cc', 'dd', 33, 4, 5, 6, 8]
列表名.insert(插入位置,插入内容),在插入位置中插入内容,会改变源列表
>>> name
[1, 2, 4, 5, 6]
>>> name.insert(2,5)
>>> name
[1, 2, 5, 4, 5, 6]
列表名.append(插入内容),在最后追加插入内容,会改变源列表
>>> name
['aa', 'cc', 'dd', 33, 4, 8, 5, 6]
>>> name.append(8)
>>> name
['aa', 'cc', 'dd', 33, 4, 8, 5, 6, 8]
列表名.pop(列表位置),删除列表为止的元素,按角标删除,并显示删除的内容,会改变源列表
>>> name1
['aa', ['fs', 'dg', 448], 'cc', 'dd', 33, 4, 5, 6, 8]
>>> name1.pop(1)
['fs', 'dg', 448]
>>> name1
['aa', 'cc', 'dd', 33, 4, 5, 6, 8]
列表名.extend(另一个列表名),将另一个列表追加到当前列表的后面,会改变源列表
>>> list1
[3, 4, 5, 6]
>>> list2
[88, 99, 10]
>>> list2.extend(list1)
>>> list2
[88, 99, 10, 3, 4, 5, 6]
列表名.index(内容),查询内容在列表中出现的第一个位置,所有此类查询都只是以元素查询,即如果查询9则99 999都不会被查到,也就是并不能查到一个元素中包含9的数量,而是精确查找9
>>> list1
[3, 4, 5, 6]
>>> print(list1.index(3))
0
>>>
列表名.sort(),将当前列表排序,在python 2中可以将字符串和数字一起排列,但是在python3中则不能一起排列,会改变源列表
>>> list3
['aa', 'bb', 'cc']
>>> list3[1]="dd"
>>> list3.sort()
>>> list3
['aa', 'cc', 'dd']
>>> list3
['aa', 'cc', 'dd', 44]
>>> list3.sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str()
列表名.count(内容),查询内容在列表中出现的次数,精确匹配
>>> list4
['aa', 'cc', 4, 5, 4, 66, 99]
>>> list4.count(4)
2
>>> list4.count(6)
0
del 列表[1] 删除列表中1角标的元素,del可以用来删除所有的内容,包括变量,列表,元素
判断 内容是否在列表中
if "F0B2.E58F.F162" in MACLIST:
print("True")
else:
print("false")
元组的定义
元组是指不能被更改的列表,一旦列表被定义为元组,则元组内的元素将不能被修改
元组的定义方法 list = (),列表使用[]定义,元组使用()定义
在元组的操作中,只有index和count可用
将元组列表话,元组名.list()
字符串操作
strip(),用来去掉字符串中的字符,默认为空格,如果要去掉特别的字符在括号中表明,会改变源字符串
>>> name
'liubo]'
>>> name1 = name.strip("]")
>>> name1
'liubo'
split(),分离将字符串按照具体的符号分离为列表,具体符号在括号中定义,不会改变源字符串
>>> maclist
'F0B2.E58F.F162,F0B2.E58F.88C9,F0B2.E58F.EE46,F0B2.E58F.F1A6,F0B2.E58F.EC50,F0B2.E58F.F1A7,F0B2.E58F.F17E,F0B2.E58F.F089,F0B2.E58F.F026,F0B2.F58F.F15D,F0B2.F58F.F056,F0B2.E58F.EE1E,F0B2.F58F.EFFF,F0B2.E58F.F17A,F0B2.E58F.F16C,F0B2.E58F.ECD4,F0B2.E58F.F19C,F0B2.E58F.F170,F0B2.E58F.ECC5,F0B2.E58F.EC5D,F0B2.E58F.ECC3,F0B2.E58F.8792,F0B2.E58F.F198,F0B2.E58F.ECDA,F0B2.E58F.F0EA,F0B2.E58F.F147,F0B2.E58F.F195,F0B2.E58F.F08C,F0B2.E58F.F19B,F0B2.E58F.F06A'
>>> MACLIST = maclist.split(",")
>>> MACLIST
['F0B2.E58F.F162', 'F0B2.E58F.88C9', 'F0B2.E58F.EE46', 'F0B2.E58F.F1A6', 'F0B2.E58F.EC50', 'F0B2.E58F.F1A7', 'F0B2.E58F.F17E', 'F0B2.E58F.F089', 'F0B2.E58F.F026', 'F0B2.F58F.F15D', 'F0B2.F58F.F056', 'F0B2.E58F.EE1E', 'F0B2.F58F.EFFF', 'F0B2.E58F.F17A', 'F0B2.E58F.F16C', 'F0B2.E58F.ECD4', 'F0B2.E58F.F19C', 'F0B2.E58F.F170', 'F0B2.E58F.ECC5', 'F0B2.E58F.EC5D', 'F0B2.E58F.ECC3', 'F0B2.E58F.8792', 'F0B2.E58F.F198', 'F0B2.E58F.ECDA', 'F0B2.E58F.F0EA', 'F0B2.E58F.F147', 'F0B2.E58F.F195', 'F0B2.E58F.F08C', 'F0B2.E58F.F19B', 'F0B2.E58F.F06A']
"".join(),合并列表为字符串,""中定义了合并后原来列表元素的分隔符,要合并的列表名写在括号内,不会改变源列表
>>> MACLIST
['F0B2.E58F.F162', 'F0B2.E58F.88C9', 'F0B2.E58F.EE46', 'F0B2.E58F.F1A6', 'F0B2.E58F.EC50', 'F0B2.E58F.F1A7', 'F0B2.E58F.F17E', 'F0B2.E58F.F089', 'F0B2.E58F.F026', 'F0B2.F58F.F15D', 'F0B2.F58F.F056', 'F0B2.E58F.EE1E', 'F0B2.F58F.EFFF', 'F0B2.E58F.F17A', 'F0B2.E58F.F16C', 'F0B2.E58F.ECD4', 'F0B2.E58F.F19C', 'F0B2.E58F.F170', 'F0B2.E58F.ECC5', 'F0B2.E58F.EC5D', 'F0B2.E58F.ECC3', 'F0B2.E58F.8792', 'F0B2.E58F.F198', 'F0B2.E58F.ECDA', 'F0B2.E58F.F0EA', 'F0B2.E58F.F147', 'F0B2.E58F.F195', 'F0B2.E58F.F08C', 'F0B2.E58F.F19B', 'F0B2.E58F.F06A']
>>> newlist = "|".join(MACLIST)
>>> newlist
'F0B2.E58F.F162|F0B2.E58F.88C9|F0B2.E58F.EE46|F0B2.E58F.F1A6|F0B2.E58F.EC50|F0B2.E58F.F1A7|F0B2.E58F.F17E|F0B2.E58F.F089|F0B2.E58F.F026|F0B2.F58F.F15D|F0B2.F58F.F056|F0B2.E58F.EE1E|F0B2.F58F.EFFF|F0B2.E58F.F17A|F0B2.E58F.F16C|F0B2.E58F.ECD4|F0B2.E58F.F19C|F0B2.E58F.F170|F0B2.E58F.ECC5|F0B2.E58F.EC5D|F0B2.E58F.ECC3|F0B2.E58F.8792|F0B2.E58F.F198|F0B2.E58F.ECDA|F0B2.E58F.F0EA|F0B2.E58F.F147|F0B2.E58F.F195|F0B2.E58F.F08C|F0B2.E58F.F19B|F0B2.E58F.F06A'
判断字符串中是否存在特定字符
print(“” in name) 判断那么字符串中是否存在空格,“”代表空格,如果需要查其他的在“”内输入
字符串名.capitalize() 字符串首字母大写
字符串名.format() 格式化输出
>>> msg = "hello,{name} your age is {age}?"
>>> print(msg.format(name = "liubo",age=30))
hello,liubo your age is 30?
>>> msg2 = "hahahah{0},dddd{1}"
>>> print(msg2.format("aaa",333))
hahahahaaa,dddd333
第二种方法中的序号必须按顺序 不能跳
字符串切片,同列表切片
字符串名.center(),将字符串取中,两边用具体字符填充,其中40代表总填充的值,字符串将在40中间的位置也就是两边各20的位置显示
>>> name = "liubo"
>>> name.center(40,"-")
'-----------------liubo------------------'
字符串名.find() 查找字符串中是否有具体的值,值填入括号中,并将值所在的第一个位置的索引显示出来,如果没有则为-1
>>> name = "iulbo"
>>> name.find("l")
2
>>> name.find("x")
-1
字符串名.isdigit() 判断字符串是否为数字
age=input("yourage:")
if age.isdigit():
age = int(age)
else:
print("invalid data type")
同理,isalnum()判断字符串中是否包含阿拉伯数字
字符串名.endswith("xx") 判断字符串是否以xx结尾
字符串名.startswith("xx") 判断字符串是否以xx开始
字符串名.upper(),字符串改大写
字符串名.lower(),字符串改小写
操作符 |
描述符 |
例子 |
+ |
加法 - 对操作符的两侧增加值 |
a + b = 30 |
- |
减法 - 减去从左侧操作数右侧操作数 |
a - b = -10 |
* |
乘法 - 相乘的运算符两侧的值 |
a * b = 200 |
/ |
除 - 由右侧操作数除以左侧操作数 |
b / a = 2 |
% |
模 - 由右侧操作数和余返回除以左侧操作数 |
b % a = 0 |
** |
指数- 执行对操作指数(幂)的计算 |
a**b = 10 的幂 20 |
// |
地板除 - 操作数的除法,其中结果是将小数点后的位数被除去的商。 |
9//2 = 4 而 9.0//2.0 = 4.0 |
源文档 <http://www.yiibai.com/python/python_basic_operators.html>
运算符 |
描述 |
示例 |
== |
检查,两个操作数的值是否相等,如果是则条件变为真。 |
(a == b) 不为 true. |
!= |
检查两个操作数的值是否相等,如果值不相等,则条件变为真。 |
(a != b) 为 true. |
<> |
检查两个操作数的值是否相等,如果值不相等,则条件变为真。 |
(a <> b) 为 true。这个类似于 != 运算符 |
> |
检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 |
(a > b) 不为 true. |
< |
检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 |
(a < b) 为 true. |
>= |
检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 |
(a >= b) 不为 true. |
<= |
检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 |
(a <= b) 为 true. |
源文档 <http://www.yiibai.com/python/python_basic_operators.html>
运算符 |
描述 |
示例 |
= |
简单的赋值运算符,赋值从右侧操作数左侧操作数 |
c = a + b将指定的值 a + b 到 c |
+= |
加法AND赋值操作符,它增加了右操作数左操作数和结果赋给左操作数 |
c += a 相当于 c = c + a |
-= |
减AND赋值操作符,它减去右边的操作数从左边操作数,并将结果赋给左操作数 |
c -= a 相当于 c = c - a |
*= |
乘法AND赋值操作符,它乘以右边的操作数与左操作数,并将结果赋给左操作数 |
c *= a 相当于 c = c * a |
/= |
除法AND赋值操作符,它把左操作数与正确的操作数,并将结果赋给左操作数 |
c /= a 相当于= c / a |
%= |
模量AND赋值操作符,它需要使用两个操作数的模量和分配结果左操作数 |
c %= a is equivalent to c = c % a |
**= |
指数AND赋值运算符,执行指数(功率)计算操作符和赋值给左操作数 |
c **= a 相当于 c = c ** a |
//= |
地板除,并分配一个值,执行地板除对操作和赋值给左操作数 |
c //= a 相当于 c = c // a |
源文档 <http://www.yiibai.com/python/python_basic_operators.html>
操作符 |
描述 |
示例 |
& |
二进制和复制操作了一下,结果,如果它存在于两个操作数。 |
(a & b) = 12 即 0000 1100 |
| |
二进制或复制操作了一个比特,如果它存在一个操作数中。 |
(a | b) = 61 即 0011 1101 |
^ |
二进制异或运算符的副本,如果它被设置在一个操作数而不是两个比特。 |
(a ^ b) = 49 即 0011 0001 |
~ |
二进制的补运算符是一元的,并有“翻转”位的效果。 |
(~a ) = -61 即 1100 0011以2的补码形式由于带符号二进制数。 |
<< |
二进位向左移位运算符。左操作数的值左移由右操作数指定的位数。 |
a << 2 = 240 即 1111 0000 |
>> |
二进位向右移位运算符。左操作数的值是由右操作数指定的位数向右移动。 |
a >> 2 = 15 即 0000 1111 |
运算符 |
描述 |
示例 |
and |
所谓逻辑与运算符。如果两个操作数都是真的,那么则条件成立。 |
(a and b) 为 true. |
or |
所谓逻辑OR运算符。如果有两个操作数都是非零然后再条件变为真。 |
(a or b) 为 true. |
not |
所谓逻辑非运算符。用于反转操作数的逻辑状态。如果一个条件为真,则逻辑非运算符将返回false。 |
not(a and b) 为 false. |
源文档 <http://www.yiibai.com/python/python_basic_operators.html>
操作符 |
描述 |
示例 |
in |
计算结果为true,如果它在指定找到变量的顺序,否则false。 |
x在y中,在这里产生一个1,如果x是序列y的成员。 |
not in |
计算结果为true,如果它不找到在指定的变量顺序,否则为false。 |
x不在y中,这里产生结果不为1,如果x不是序列y的成员。 |
源文档 <http://www.yiibai.com/python/python_basic_operators.html>
运算符 |
描述 |
例子 |
is |
计算结果为true,如果操作符两侧的变量指向相同的对象,否则为false。 |
x是y,这里结果是1,如果id(x)的值为id(y)。 a = "sss" type(a) is str true |
is not |
计算结果为false,如果两侧的变量操作符指向相同的对象,否则为true。 |
x不为y,这里结果不是1,当id(x)不等于id(y)。 |
源文档 <http://www.yiibai.com/python/python_basic_operators.html>
Python运算符优先级
下表列出了所有运算符从最高优先级到最低。
[ 查看示例 ]
运算符 |
描述 |
** |
幂(提高到指数) |
~ + - |
补码,一元加号和减号(方法名的最后两个+@和 - @) |
* / % // |
乘,除,取模和地板除 |
+ - |
加法和减法 |
>> << |
左,右按位转移 |
& |
位'AND' |
^ | |
按位异'或`'和定期`或' |
<= < > >= |
比较运算符 |
<> == != |
等式运算符 |
= %= /= //= -= += *= **= |
赋值运算符 |
is is not |
标识运算符 |
in not in |
成员运算符 |
not or and |
逻辑运算符 |
源文档 <http://www.yiibai.com/python/python_basic_operators.html>
二进制 左移 > > 开根
右移,2次方
循环
while true: 为真就循环,为了避免出现死循环,应该设置一个退出条件
例如
count = 0
while true:
count +=1
print(“test”)
if count == 100 :
print(“end”)
break
当需要在循环中的一个区间单独设置,也就是终端当前循环,直接开始下一个循环,使用continue
continue,终端当前循环,继续下一个循环
下例子中当count在50到60之间时,执行continue,因此不会打印test
count = 0
while true:
count +=1
if count > 50 and count < 60: /
continue
print(“test”)
if count == 100 :
print(“end”)
break
break,直接终止循环
字典
字典格式的定义使用{},列表为[],元组是()
字典中可以嵌套字典
字典的第一个字段是key字段,字典会基于key字段去重复
下例中的1,2就是第一个字段
>>> dict_db = {
... 1:{
... "liubo":{
... "age":30,
... "addr":"beijing"
... },
... "liubo2":{
... "age":33,
... "addr":"ganshu"
... },
... },
... 2:{
... "zhangsan":{
... "age":20,
... "addr":"guangdong"
...
... }
... }
...
... }
>>>
>>> print(dict_db)
{1: {'liubo': {'addr': 'beijing', 'age': 30}, 'liubo2': {'addr': 'ganshu', 'age': 33}}, 2: {'zhangsan': {'addr': 'guangdong', 'age': 20}}}
字典的元素的定义格式是key:value的模式,例如上面的“age”:30
下列操作字典名后面[]内的层级依据实际情况
字典名[字典key字段的值] 取字典中的值
>>> dict_db[2] //[2]是字典中的key字段的值,上例中是1 和2 本例取2
{'zhangsan': {'addr': 'guangdong', 'age': 20}}
字典名[字典key字段的值] [内部字段名] = XXX 改变字典中特定字段内特别变量的值
>>> dict_db[2]["zhangsan"]["addr"] = "USA"
>>> dict_db[2]["zhangsan"]
{'addr': 'USA', 'age': 20}
字典名[字典key字段的值] [新的内部字段名] = XXX 在字典中增加字段
>>> dict_db[2]["zhangsan"]["QQ"]=2222222
>>> dict_db[2]
{'zhangsan': {'addr': 'USA', 'QQ': 2222222, 'age': 20}}
>>>
del 字典名[字典key字段的值] [指定的字段名]
或
字典名[字典key字段的值].pop(“字段名”)删除特定字段
>>> del dict_db[2]["zhangsan"]["QQ"]
>>> dict_db[2]
{'zhangsan': {'addr': 'USA', 'age': 20}}
或
>>> dict_db[2]
{'zhangsan': {'addr': 'USA', 'age': 20}}
>>> dict_db[2]["zhangsan"].pop("age")
20
>>> dict_db[2]
{'zhangsan': {'addr': 'USA'}}
>>>
字典.copy(),复制 同列表为浅copy
>>> id_db = dict_db[2].copy() //将dict_db第二个子字典复制给id_db
>>> id_db
{'zhangsan': {'addr': 'USA'}}
>>>
>>>
>>> dict_db[2]["zhangsan"]["addr"] = "UK" //修改dict_db中的值
>>> id_db
{'zhangsan': {'addr': 'UK'}} //id_db也被修改了
字典.get(),获取 get方法和直接赋值是一样的,但是使用get方法如果获取一个不存在的值会返回NONE,但是直接赋值则会报错
>>> v = id_db[3] //直接赋值造成报错,中断程序
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 3
>>> v = id_db.get(3) 使用get方法不会造成程序中断
>>> print(v)
None
旧字典.update(“新字典”) 使用新字典的内容去更新旧字典,如果旧字典中有对应的key则用新字典中的key覆盖,如果么有则将新字典中的key新增在旧字典中
>>> dict_db //旧字典
{1: {'liubo': {'addr': 'beijing', 'age': 30}, 'liwei': {'addr': 'ganshu', 'age': 33}}, 2: {'zhangsan': {'addr': 'UK'}}}
>>>
>>>
>>> new = { 2:{"name":"lisi","age":4444,"ip":"aaa"},5:{"test":334}
... }
>>> new //新字典
{2: {'ip': 'aaa', 'age': 4444, 'name': 'lisi'}, 5: {'test': 334}}
>>> dict_db.update(new)
>>> dict_db
{1: {'liubo': {'addr': 'beijing', 'age': 30}, 'liubo2': {'addr': 'ganshu', 'age': 33}}, 2: {'ip': 'aaa', 'age': 4444, 'name': 'lisi'}, 5: {'test': 334}}
>>>
print(字典.items()),将字典转化为列表或元祖,这个动作非常耗时,因此尽量不要使用
>>> print(id_db.items())
dict_items([('zhangsan', {'addr': 'UK'})])
print(字典.values()),打印字典中所有的值
>>> print(dict_db)
{1: {'liubo': {'addr': 'beijing', 'age': 30}, 'liubo2': {'addr': 'ganshu', 'age': 33}}, 2: {'ip': 'aaa', 'age': 4444, 'name': 'lisi'}, 5: {'test': 334}}
>>> print(dict_db.values())
dict_values([{'liubo': {'addr': 'beijing', 'age': 30}, 'liwei': {'addr': 'ganshu', 'age': 33}}, {'ip': 'aaa', 'age': 4444, 'name': 'lisi'}, {'test': 334}]) //没有1和2了
print(字典.keys()),打印字典中所有的key
>>> print(dict_db.keys())
dict_keys([1, 2, 5])
字典.has_key(特定的key) 在python 2.0中的方法,判断字典中是否存在特定的key
特定的key in 字典 在python 3.0中,判断字典中是否存在特定的key
>>> 1 in id_db
False
>>> 1 in dict_db
True
print(字典.setdefault(key,值)) 如果key在这个字典中存在,则返回值,如果不存在则在字典中追加这个key,并指定默认值,如果没有指定则为None
>>> id_db
{222: {'name': 'zhangsan', 'age': 33}, 1111: {'name': 'liubo', 'age': 30}}
>>> print(id_db.setdefault(111))
None
>>> id_db
{111: None, 222: {'name': 'zhangsan', 'age': 33}, 1111: {'name': 'liubo', 'age': 30}}
>>> print(id_db.setdefault(222))
{'name': 'zhangsan', 'age': 33}
>>> print(id_db.setdefault(2222,"test"))
test
>>> id_db
{111: None, 2222: 'test', 222: {'name': 'zhangsan', 'age': 33}, 1111: {'name': 'liubo', 'age': 30}}
print(id_db.fromkeys([字典的key],默认值)) ,按照字典的key列表的接口输入为字典的key,key的值为默认值,不改变元字典
>>> id_db
{111: None, 2222: 'test', 222: {'name': 'zhangsan', 'age': 33}, 1111: {'name': 'liubo', 'age': 30}}
>>> print(id_db.fromkeys([111,333,555],"aaaa"))
{555: 'aaaa', 333: 'aaaa', 111: 'aaaa'}
>>> id_db
{111: None, 2222: 'test', 222: {'name': 'zhangsan', 'age': 33}, 1111: {'name': 'liubo', 'age': 30}}
>>>
print(id_db.popitem()) 随机删除字典中的key
遍历字典
>>> for x in id_db:
... print(x,id_db[x])
...
111 None
2222 test
222 {'name': 'zhangsan', 'age': 33}
1111 {'name': 'liubo', 'age': 30}
遍历字典时输出序列号,枚举函数
使用字典、元祖或列表
for index.i in list:
print(index.i)
上面的方法会将列表重新输出成为元祖,其第一个元素就是这个元素在原来列表中的角标
list=["北京","天津","湖北","湖南"]
for Index in enumerate(list):
print(Index)
(0, '北京')
(1, '天津')
(2, '湖北')
(3, '湖南')
以元组的形式输出,这时就可以获取元组的标号和内容了
list_num=Index[0]
list_name=Index[1]
print(list_num,"$",list_name)
0 $ 北京
1 $ 天津
2 $ 湖北
3 $ 湖南
集合
是无序、去重复的一种数据类型
集合的创建
s1 = {11,22}
s2 = set{} #创建一个空集合
s3 = set([11,22,33]) #将一个列表转换为集合,类似list
集合的操作
集合.add() 给集合中增加一个元素
s=set()
print(s)
s.add(123)
print(s)
输出
set()
{123}
集合.update(),批量更新,括号内的内容可以是列表、元组、字符串
update的执行过程就是通过for循环,循环add命令
集合.clear()清除集合中所有的内容
集合.copy() 复制集合,浅复制,仅复制第一层
查看差集
集合A.difference(新集合B) A中存在,b中不存在的内容,不改变原集合
集合A.symmetric_difference(新集合B) 比较A和B之间都不存在的值,不改变原集合
更新集合
集合A.difference_update(新集合B),将A中存在,B中不存在的内容替换到集合A中,
s1={11,22,33}
s2={22,33,44}
print(s1)
s1.difference_update(s2)
print(s1)
输出
{33, 11, 22}
{11}
集合A.symmetric_difference_update(集合B),将集合A B中都没有的数据替换到集合A中
s1={11,22,33}
s2={22,33,44}
print(s1)
s1.symmetric_difference_update(s2)
print(s1)
输出
{33, 11, 22}
{11, 44}
集合.discard(特定元素) 移除特定的元素,不存在不报错
s1={11,22,33}
s1.discard(11)
print(s1)
输出
{33, 22}
集合.remove(特定元素) 移除特定的元素,不存在会报错
集合.pop() 随机移除元素移除元素,并把移除的元素返回,可以将其赋给一个变量
s1={111,222,333}
s=s1.pop()
print(s)
集合.intersection(新集合) ,取两个集合的交集,需要赋值
集合A.intersection_update(新集合B) ,取两个集合的交集,并将其替换到集合A中
集合A.isdisjoint(集合B),判断两个集合之间是否有交集,有就是True没有就是False
集合A.issubset(集合B),判断集合A是否是集合B的字集
集合A.issuperset(集合B),判断集合A是否是集合B的超集
集合.union(集合B),将两个集合合并,去重复。并集
关于集合的联系
当两个字典,一个字典时原先的状态记录,另一个字典时最新的状态记录,我们应该使用什么方法来确定:
什么条目应该被删除
什么条目应该被更新
什么条目应该被增加
old_status={
"1#":4,
"2#":8,
"4#":16
}
new_status={
"1#":8,
"2#":8,
"3#":16
}
#首先需要将原先字典中的key转化为集合
old_set=set(old_status.keys())
new_set=set(new_status.keys())
#需要删除的内容是:老的状态中存在,但是在新状态中却没有的
status_remove=old_set.difference(new_set)
print("status_remove:%s"%status_remove)
#需要新增的内容是:新的状态中存在,但是在老状态中没有的
status_add=new_set.difference(old_set)
print("status_add:%s"%status_add)
#需要被更新的内容是:新旧状态都存在的
status_update=old_set.intersection(new_set)
print("status_update:%s"%status_update)
输出
status_remove:{'4#'}
status_add:{'3#'}
status_update:{'1#', '2#'}
python上加颜色
\033[31;1m内容\033[0m 为红色
\033[32;1m内容\033[0m 为绿色
salary=input("\033[31;1mInputyoursalary:\033[0m")
购物车程序作业需求:
1、允许用户选择购买了多少件
2、允许多用户登录,并且下次登录后,继续按上次的余额购买,允许充值
3、允许用户查看之前的购买记录,并显示购买时间
4、商品列表分级展示
5、重复商品在一行内显示总量,不多行展示
新知识,会用到文件,datetime模块,序列化json
Python第二天课程的更多相关文章
- 孤荷凌寒自学python第二十九天python的datetime.time模块
孤荷凌寒自学python第二十九天python的datetime.time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.time模块是专门用来表示纯时间部分的类. ...
- 孤荷凌寒自学python第二十八天python的datetime.date模块
孤荷凌寒自学python第二十八天python的datetime.date模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.toordinal() 此方法将访问从公元1年1月1日至当 ...
- 孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块
孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.datetime模块 dateti ...
- 孤荷凌寒自学python第二十六天python的time模块的相关方法
孤荷凌寒自学python第二十六天python的time模块的相关方法 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 要使用time模块的相关方法,必须在文件顶端引用: import tim ...
- 孤荷凌寒自学python第二十五天初识python的time模块
孤荷凌寒自学python第二十五天python的time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 通过对time模块添加引用,就可以使用python的time模块来进行相关的时间操 ...
- 孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘
孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天发现了python的类中隐藏着一些特殊的私有方法. 这些私有方法不管我 ...
- 孤荷凌寒自学python第二十三天python类的封装
孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...
- 孤荷凌寒自学python第二十二天python类的继承
孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...
- python入门学习课程推荐
最近在学习自动化,学习过程中,越来越发现coding能力的重要性,不会coding,基本不能开展自动化测试(自动化工具只是辅助). 故:痛定思痛,先花2个星期将python基础知识学习后,再进入自动化 ...
随机推荐
- Android替换APP字体 — Typeface
Android替换APP字体 — Typeface APP字体的思路一般都会想到自定义控件(TextView.EditView),但是项目中会有很多种控件,就算用也会承担一些风险和资源的消耗,主要是这 ...
- Servlet的ClassLoader
摘自深入java web技术内幕修订版
- Spring MVC---数据绑定和表单标签
数据绑定和表单标签 数据绑定 数据绑定是将用户输入绑定到领域模型的一种特性,在Spring MVC的controller和view数据传递 ...
- 前端:JS获取单击按钮单元格所在行的信息
在操作表格前后端交互式时,总会遇到将所要操作的行的信息传至后台进行数据库更新的操作,本文适用于标准的html页面和js库,并提出了三种操作方式根据实际情况进行选择 1.表格格式如图所示 2.表格代码如 ...
- iscroll实现移动端下拉刷新,上拉加载更多
js菜鸡-------自我记录 html页面: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...
- Javaweb 第2天 JavaScript课程
JavaScript课程 两日大纲 ● JavaScript基本语法 ● JavaScript函数 ● JavaScript基于对象编程 ● JavaScript BOM对象编程 ● JavaScri ...
- Redmine管理项目2-邮件通知
下面是为Redmine配置邮件通知 配置文件 config/configuration.yml 是 Redminde 的配置文件,里面有非常多的选项,邮件通知.附件保存地址. SCM .rmagick ...
- WPF wpf scrollviewer 触屏滚动 窗体弹跳
触屏滚动实现 设置属性 在ScrollViewer的xaml代码那里加上 PanningMode="Both" 在ScrollViewer的xaml代码那里加上 Manipula ...
- 数据库开启gtid时,需要注意的问题
1.slave不能执行任何sql,包括超级用户2.read_only=on,这个必须要开启,避免业务执行sql3.保证当前slave的事务id为1 当slave同步出现问题时,手动跳过,需要考虑的问题 ...
- 脚本录制--html模式和url模式
设置位置:tool--recording options-recording 1.html模式--默认---结果较简单 脚本采用html页面的形式来展示,优点:容易维护.容易理解 2.url模式--- ...