创建列表的方式

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第二天课程的更多相关文章

  1. 孤荷凌寒自学python第二十九天python的datetime.time模块

     孤荷凌寒自学python第二十九天python的datetime.time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.time模块是专门用来表示纯时间部分的类. ...

  2. 孤荷凌寒自学python第二十八天python的datetime.date模块

     孤荷凌寒自学python第二十八天python的datetime.date模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.toordinal() 此方法将访问从公元1年1月1日至当 ...

  3. 孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块

    孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.datetime模块 dateti ...

  4. 孤荷凌寒自学python第二十六天python的time模块的相关方法

    孤荷凌寒自学python第二十六天python的time模块的相关方法 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 要使用time模块的相关方法,必须在文件顶端引用: import tim ...

  5. 孤荷凌寒自学python第二十五天初识python的time模块

    孤荷凌寒自学python第二十五天python的time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 通过对time模块添加引用,就可以使用python的time模块来进行相关的时间操 ...

  6. 孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘

    孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天发现了python的类中隐藏着一些特殊的私有方法. 这些私有方法不管我 ...

  7. 孤荷凌寒自学python第二十三天python类的封装

    孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...

  8. 孤荷凌寒自学python第二十二天python类的继承

    孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...

  9. python入门学习课程推荐

    最近在学习自动化,学习过程中,越来越发现coding能力的重要性,不会coding,基本不能开展自动化测试(自动化工具只是辅助). 故:痛定思痛,先花2个星期将python基础知识学习后,再进入自动化 ...

随机推荐

  1. Android替换APP字体 — Typeface

    Android替换APP字体 — Typeface APP字体的思路一般都会想到自定义控件(TextView.EditView),但是项目中会有很多种控件,就算用也会承担一些风险和资源的消耗,主要是这 ...

  2. Servlet的ClassLoader

    摘自深入java web技术内幕修订版

  3. Spring MVC---数据绑定和表单标签

                                   数据绑定和表单标签 数据绑定 数据绑定是将用户输入绑定到领域模型的一种特性,在Spring MVC的controller和view数据传递 ...

  4. 前端:JS获取单击按钮单元格所在行的信息

    在操作表格前后端交互式时,总会遇到将所要操作的行的信息传至后台进行数据库更新的操作,本文适用于标准的html页面和js库,并提出了三种操作方式根据实际情况进行选择 1.表格格式如图所示 2.表格代码如 ...

  5. iscroll实现移动端下拉刷新,上拉加载更多

    js菜鸡-------自我记录 html页面: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  6. Javaweb 第2天 JavaScript课程

    JavaScript课程 两日大纲 ● JavaScript基本语法 ● JavaScript函数 ● JavaScript基于对象编程 ● JavaScript BOM对象编程 ● JavaScri ...

  7. Redmine管理项目2-邮件通知

    下面是为Redmine配置邮件通知 配置文件 config/configuration.yml 是 Redminde 的配置文件,里面有非常多的选项,邮件通知.附件保存地址. SCM .rmagick ...

  8. WPF wpf scrollviewer 触屏滚动 窗体弹跳

    触屏滚动实现 设置属性  在ScrollViewer的xaml代码那里加上 PanningMode="Both" 在ScrollViewer的xaml代码那里加上 Manipula ...

  9. 数据库开启gtid时,需要注意的问题

    1.slave不能执行任何sql,包括超级用户2.read_only=on,这个必须要开启,避免业务执行sql3.保证当前slave的事务id为1 当slave同步出现问题时,手动跳过,需要考虑的问题 ...

  10. 脚本录制--html模式和url模式

    设置位置:tool--recording options-recording 1.html模式--默认---结果较简单 脚本采用html页面的形式来展示,优点:容易维护.容易理解 2.url模式--- ...