python数据类型及部分操作

一、列表 list

1.定义:列表、list、数组、array其实都是指的同一个事物;

2.特点:

1)列表的定界符为一对中括号 如a=['123','456']那么a就是一个列表

2)列表索引的下标是从0开始计时的,如 print(a[0]) 则为123 e.g.1

3)下标为-1,表示取最后一个元素 e.g.2

3.列表的操作

1)定义空列表 , list = [] , e.g.3

2)增加_给列表增加元素

>append()方法 :在列表末尾增加一个元素 e.g.4

  可通过循环查看append后的效果,e.g.5

  注意:append()方法里面只能写一个参数

 

lista = [] #定义空列表
for i in range(3): #循环3次
    lista.append(i)  #将每次循环的添加到lista中
    print('打印第%d次append的结果%s'%(i,lista))  #打印lista

> insert()方法,定义的格式insert(index,object),在列表的第x个索引位置添加 e.g.6

注意:

    a.如果索引为负数表示从右开始的第x个角标插入,但是最后一个位置不能通过-0插入

    b.如果index的绝对值大于列表长度,则将值插在list的第一个位置或者最后一个位置

    c.这种负值操作应该属于非人操作,可忽略

3)删除操作

>pop(),删除指定索引位置的元素,默认是最后一个,并返回元素,即xxx.pop()的作用是将xxxlist最后一个元素删除 e.g.7

说明:

   b.如果list的下标索引值在list中找不到或者list为空都会报错,如下图 e.g.8

> remove()       删除列表中的某个元素

   格式:xxx.remove(value) 

def remove(self, value): # real signature unknown; restored from __doc__
    """
    L.remove(value) -> None -- remove first occurrence of value.
    Raises ValueError if the value is not present.
    """
    pass
   说明:如果列表中不存在要查找的value则会报错 e.g.9

PS:

    a. pop()与remove()的区别:

       pop()利用角标进行删除

       remove()根据入参的值进行删除

    b. pop()与remove()的共同点:

        如果检索不到下标或者value均会报错 e.g.10

>clear() 清空整个列表  e.g.11

def clear(self): # real signature unknown; restored from __doc__
    """ L.clear() -> None -- remove all items from L """
    pass
>del  list[下标]  使用del关键字,通过list的下标删除元素

4)修改   

     格式:list[x]='xxx' 

     说明:修改列表某个位置的内容,如果列表无对应下标则会报错

5)查找

    > 获取元素的下标

             格式:list.index(value,[start,[stop]])

             说明:

                        a.返回value在列表中第一次匹配到的下标值(列表中允许有重复的value),

                        b.value是必须填写的参数;

                        c.start,stop为列表的下标,必须为int类型;

                        c.如果value在列表中找不到对应的值,则会报错

     > 根据下标获取对应value

         格式:list[x]

         说明:x为列表中的某个下标,如果下标越界会报错

6)其他操作

     >list.count('value')      统计某个value出现的次数

     >list.reverse()   反转列表

     >list.sort()     列表原地排序(存疑)

     >list1+list2   合并列表,列表2挂在列表1之后

     >list*n          复制列表

    >lista.extend(listb)  #将listb列表合并到lista列表之后,练习见

    >len(list) #统计列表中的数据项的个数 如:a =['123','456','789'] 那么len(a) =3

def extend(self, iterable): # real signature unknown; restored from __doc__
    """ L.extend(iterable) -> None -- extend list by appending elements from the iterable """
    pass

     说明:sort()可排序数字和字母,汉字的排序还打不到预想的效果




e.g.1


e.g.2


e.g.3



e.g.4


e.g.5 通过循环查询append()方法的效果


注意:append()方法里面只能写一个参数


e.g6 insert()

 
lista = [] #空list
#lista.insert(0,'lp')
lista.insert(1,'index1')
print(lista)
lista.insert(0,'index0')
print(lista)
lista.insert(-0,'index0')
print(lista)
lista.insert(-2,'index右2')
print(lista)
lista.insert(-1,'index右1')
print(lista)
lista.insert(-3,'index右3')
print(lista)
lista.insert(-6,'index右6')
print(lista)
lista.insert(-10,'index右10')#如果index的绝对值大于列表长度,则将值插在list的第一个位置或者最后一个位置
print(lista)
lista.insert(20,'index二十')
print(lista)

运行结果:


 e.g.7    pop(),删除指定索引位置的元素,默认是最后一个,即xxx.pop()的作用是将xxxlist最后一个元素删除

lista = ['一','二','三','四','五','六','七','八','九']
print(lista)
#  L.pop([index]) -> item -- remove and return item at index (default last).  Raises IndexError if list is empty or index is out of range.
lista.pop(-0)
print(lista)
lista.pop(-2)
print(lista)
lista.pop(-3)
print(lista)
lista.pop()
print(lista)
lista.pop(0)
print(lista)

运行结果:


e.g.8 如果list的下标索引值在list中找不到或者list为空都会报错,如下图


下标越界


对空list进行pop操作


e.g.9    remove()   如果列表中不存在要查找的value则会报错,如下所示:


e.g.10 pop(index)如果下标不存在会报错


e.g.11 clear 清空列表


 e.g.12 del  list[下标]



ps:

-号表示从右侧开始的角标位置(-1表示最后一个即从右边数的第一个,-2表示从右边数的第2个),纯属自己试验猜测

4)修改   

     格式:list[x]='xxx' 

     说明:修改列表某个位置的内容,如果列表无对应下标则会报错


5)查找

    > 获取元素的下标

             格式:list.index(value,[start,[stop]])

             说明:

                        a.返回value在列表中第一次匹配到的下标值(列表中允许有重复的value),

                        b.value是必须填写的参数;

                        c.start,stop为列表的下标,必须为int类型;

                        c.如果value在列表中找不到对应的值,则会报错



     > 根据下标获取对应value

        格式:list[x]

        说明:x为列表中的某个下标,如果下标越界会报错


6)其他操作

     >list.count('value')      统计某个value出现的次数

     >list.reverse()   反转列表

     >list.sort()     列表原地排序(存疑)

     >list1+list2   合并列表,列表2挂在列表1之后

     >list*n          复制列表

     说明:sort()可排序数字和字母,汉字的排序还打不到预想的效果




练习:


列表的合并,listb+lista  复制n次


问题:字典没有参数,这个以后再研究


e.g.13



二、字典

1.概念

字典是以key-value形式存在的数据类型

特点:

> 取数据方便

> 速度快(比list快)

> 字典是无序的

2.查询取值方法

1)get('key')


get('key')后面还可以跟一个默认值,即get('key',default),如:dic.get('xxx','NULL'),如果dic字典中找不到xxx对应的key那么返回NULL


2)dic['key']

注意:

方法 get('key'),dic['key']的区别是,['key']如果在字典中取不到key的值,程序会报错,get('key')取不到key不会报错

e.g


脚本:

dic_infos = {'marry':[18,13212345678,'北京'],'amy':[20,13312345678,'山东'],'lily':[25,13412345678,'河南']}
#查询
#方式一:get('key')
print('获取key为marry的信息:',dic_infos.get('marry'))
print('获取key为xxx的信息,字典无对应key返回None:',dic_infos.get('xxx')) #get不到与xxx对应的key返回None
#如果取不到与xxx对应的key,那么返回输入的默认值,如此处的NULL,get不影响字典数据
print('获取key为xxx的信息,字典无对应key返回默认值NULL:',dic_infos.get('xxx','NULL'))
print('打印字典dic_infos:',dic_infos)
#方式二:xxx['key']
print('方式二获取key为marry的信息:',dic_infos['marry'])
print('方式二获取key为xxx的信息,获取不到会报错:',dic_infos['xxx']) #获取不到与xxx对应的key程序会报错

   >多维字典获取值

people = {
   '张三':{
      'age':18,
      'money':200000,
      'clothes':'100套',
      'hzp':'n多',
      'shoes':['nike','addis','lv','chanle']
   },
   '李四':{
      '金库':'2000w',
      'house':['三环一套','4环2套'],
      'cars':    {
            'japan':['普拉多','兰德酷路泽'],
            'usa':['林肯','凯迪拉克','福特'],
            'china':['五菱宏光','qq','红旗']
         }
   }
}

e.g

#获取字典中的qq车


#给张三增加400


#for循环直接循环字典,in只能判断key是不是存在与字典中


#使用for循环字典的item(),判断key和value是否存在与字典中


脚本:

#循环同时取到key和value,使用people.items()定义2个参数
for ke,val in people.items():
    print(ke,'---',val)

3)获取所有的key,value 级key-value

       > dic.values()  获取到字典中所有的value值并存放到元组中

       

       >dic.keys()   获取到字典中所有的key并存放到元组中

        

       >dic.items() 获取字典中所有的字典项的key-value并存放到元组中

         

e.g



脚本:

dic_infos = {'marry':[18,13212345678,'北京'],'amy':[20,13312345678,'山东'],'xxx':'你好','yyy':'我好','zzz':'大家好','lp':['123','456']}
#获取值
print('打印所有的value:',dic_infos.values())#获取到字典所有的value值并且存放在元组
for i in dic_infos.values():
    print(i)
#print('打印所有的value:',dic_infos.values())#获取到字典所有的value值并且存放在元组
# print('打印所有的key:',dic_infos.keys()) #获取到字典所有的key并且存放在元组
# print('key-value:',dic_infos.items())#获取到字典所有的key+value并且存放在元组

3.字典的新增操作

1)dic['key'] = value  key与value将插入到字典的末尾,

2)dic.setdefault('key',[default value])  key与value将插入到字典的末尾,default value可以缺省,如果不写则默认插入None


3)update()   a.update(b)  #相当于把b字典元素添加到a中

4)三种新增方式的区别:

> 如果字典中不存在与新增key同名的key值,那么1)2)3)的效果一致,都是在字典的尾部插入字典项

>如果字典中存在于与新增key同名的key值,那么方法一与方法二效果不同,如下所示:

    1)3)新增字典项,如果key在字典中已经存在,那么后面key的value会将字典中同名的key的value修改

    2)新增字典项,如果key在字典中已经存在,那么后面key的value不会将字典中同名的key的value修改

e.g


脚本:

 
dic_infos = {'marry':[18,13212345678,'北京'],'amy':[20,13312345678,'山东']}
#增加
print('打印字典dic_infos:',dic_infos)
#方式一:
dic_infos['xxx']=''                       #key为xxx,value为空的字典项将被插入字典末尾,dic_infos['xxxx']=''
print('打印添加了xxx的dic_infos:',dic_infos)
dic_infos['xxx']='123'                      #如果key已经存在会修改key的值,相当于修改操作
print('如果key已经存在会将key的值覆盖:',dic_infos)
#方式二:
dic_infos.setdefault('yyy')
print('setdefault()只传入key参数,那么value为None:',dic_infos)
dic_infos.setdefault('zzz','zzz不存在插入')
print('打印添加了zzz的dic_infos:',dic_infos)
dic_infos.setdefault('zzz','zzz已存在不会改变字典')
print('zzz在字典存在,不会key的v:',dic_infos)
#如果key不存在[]与setdefault的效果一致
#dic_infos['xxx']='update' #如果key已经存在会修改key的值,
#dic_infos.setdefault('xxx','update?')#如果默认已经有了key ,则不会更改
#dic_infos['aaa']= ['aaa的value','aaa的value为列表']  #value也可以是列表
#print('打印添加了aaa的dic_infos:',dic_infos)


4.字典的修改操作

方式:dic['key'] = value

方式:dic.update('key':'value') 

def update(self, E=None, **F): # known special case of dict.update
    """
    D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
    If E is present and has a .keys() method, then does:  for k in E: D[k] = E[k]
    If E is present and lacks a .keys() method, then does:  for k, v in E: D[k] = v
    In either case, this is followed by: for k in F:  D[k] = F[k]
    """
    pass

e.g


脚本:

dic_infos = {'marry':[18,13212345678,'北京'],'amy':[20,13312345678,'山东']}
#增加
print('打印字典dic_infos:',dic_infos)
#方式一:
dic_infos['xxx']='abc'                       #key为xxx,value为abc的字典项将被插入字典末尾
print('插入xxx后的字典:',dic_infos)
dic_infos['xxx']='我是修改,修改前是abc'    #修改xxx的value为efg
print('修改xxx后的字典:',dic_infos)

5.字典的删除操作

1)pop('key')   删除字典中的某个key的字典项


e.g


2)popitem() ,方法中没有入参,随机删除字典中的某个字典项,如果字典为空,此方法会报错(不常用)


e.g


说明:字典本无序,无所谓前后,此处只是巧合从感官上每次都是pop的最后一个

脚本:

dic_infos = {'marry':[18,13212345678,'北京'],'amy':[20,13312345678,'山东'],'xxx':'你好','yyy':'我好','zzz':'大家好','lp':['123','456']}
#删除的方法
print('打印字典dic_infos:',dic_infos)
for i in range(7):
    print('循环次数:',i)
    dic_infos.popitem()#随机删除一个
    print('随机删除之后的字典:',dic_infos)

3)del dic['key'] 使用del删除字典,如果在字典中没有对应的key那么程序会报错

e.g



4)clear()  清空字典,字典为空字典,执行clear()也不会报错


e.g


脚本:

dic_infos = {'marry':[18,13212345678,'北京'],'amy':[20,13312345678,'山东'],'xxx':'你好','yyy':'我好','zzz':'大家好','lp':['123','456']}
#删除的方法
print('打印字典dic_infos:',dic_infos)
dic_infos.clear() #清空
print('执行clear之后的字典:',dic_infos)
dic_infos.clear() #清空
print('执行clear2次:',dic_infos)

三、切片

切片Slice

1.列表/字符串取值的一种方式;

2.格式:list[start:stop[:setp]]   

3.说明:

   1)start起始下标(包含),stop结束下标(不包含),step步长(可选,默认步长为1)

        e.g.1  list[0:10:2]  获取list列表中下标为0,2,4,6,8,的value

   2)若start,stop均不写,则表示取值范围为整个列表

        e.g.2 list[::]

   3)若step为负值,则表示在start - stop 的范围从右往左取值,绝对值表示步长

        e.g.3 list[::-1] / list[::-2]

   4)若步长为负数,stop大于start将取到空的列表

        e.g.4  new_stus[2:6:-1] 取不到值,因为2的左侧只有0和1这2个下标;new_stus[6:2:-1] 可以取到值



结果截图:

e.g.1


e.g.2


e.g.3



e.g.4


四、类型转换

类型转换

1.int(param)     将参数param转成int类型

2.list(param)    将参数param转成list类型

3.bool(param)  将参数param转成布尔类型

五、判断参数的类型

类型判断

1.type(param) == list  判断参数是否为list列表

2.type(param) == int 判断参数是否为int类型

3.type(param) == float 判断参数是否为float类型



六、元组

元组Tuple

1.元祖也是一个list,它与list的区别是,元组里面元素无法修改;

2.定界符,一对小括号(),如果 t =(1,2,3) 那么t为1个元组

3.如果元组中只有一个元素,元素的后面需要添加一个逗号才表示元组类型,不然就等于元素的类型;如e.g.1

4.元组不支持修改操作,元组定义好之后,不能修改其中的元素;e.g.2

5.元组可进行的操作:循环、切片、下标取值,统计数量;e.g.3

6.优点:存放不可修改的数据,避免修改导致的不必要的麻烦


e.g.1


e.g.2


e.g.3


七、布尔类型

布尔类型Boolean

1.布尔类型,只有2个值 True 和False

2.python中True首字母大写才是关键字,true只是个普通的变量

八、字符串

字符串 String

1.字符串常用方法

e.g.1

 # strip()  #默认去掉字符串两端的空格和换行符
# lstrip() #默认去掉左边的空格和换行符

# rstrip() #默认去掉右边的空格和换行符

e.g.2

# strip('xxx')#删除指定的字符串,不改变原有字符串的元素,字符串不能被修改
# .count('a')#统计字符串出现的次数
# .index('x')#查找字符串的位置,如果元素找不到会报错 (ValueError: substring not found)

# .find('x')#如果元素找不到不会报错,返回-1

#所以,查找元素,只用find()方法要优于index()

e.g.3

# .replace('old'.'new') #替换字符串,同样不改变原字符串,但是可以将结果赋值给另外一个变量

e.g.4

# .startswith()   匹配返回True,不匹配返回False

# .endswith()    匹配返回True,不匹配返回False

e.g.5

# .upper()变成大写,不改变原字符串,但是可以将结果赋值给另外一个变量

# .lower()变成小写,不改变原字符串,但是可以将结果赋值给另外一个变量

e.g.6 字符串判断

print('判断数字:',words_digit.isdigit()) #字符串全部内容均为数字才为真
print('判断数字:',words.isdigit()) #判断是否为数字
print('字符串存在大小写混合,判断小写:',words.islower())#判断是否为小写
print('字符串中的字母全部为小写,判断小写:',words_lower.islower())#字符串中的字母全部为小写即可
print('字符串存在大小写混合,判断大写:',words.isupper())#判断是否为大写
print('字符串中的字母全部为大写,判断大写:',words_upper.isupper())#字符串中的字母全部为大写即可
#istitle()判断首字母是否大写
#isprintable()判断是否可打印 (有疑问)
#isidentifier()判断是否有定义 (有疑问)
#isdecimal()判断是否为十进制
#isspace()判断字符串是否全部为空格,空字符串也为False
#isnumeric()判断字符串仅包含数字,其他任何字符的存在都返回False
#isalpha()判断字符串是否全部为字母,全部为字母(也可包含汉字)则为True,包含数字、空格等符号均为False

#isalnum()字符串为大写、小写、数字(此3者为或的关系)则为真,若包含其他则为假,汉字不再判断列表中,字母数字夹杂汉字也为True


e.g.7

 字符串连接: ''.join('') 

  1)''表示用什么符号进行连接join()里面的元素,单引号中什么都不写则表示把join()里面的元素连接成字符串
  2)返回字符串 

  3)只要是可以循环的,join都可以连接,字典、list 、string都可以使用join

e.g.8

分割字符串:string.split('x')

     1)根据x字符分割字符串,返回一个列表list
     2)如果分割的符号在string中不存在,将会将所有的字符串放在一个list中
     3)此方法,只适合字符串
     4)以谁分割,则谁不显示在返回的list中
     5)什么也不传,表示以空格分割

e.g.9

格式化字符串

       方式一: %s  ;此方法参数要和%s位置一一对应,不然就会传错参数

       方式二:format()方法,需要先用花括号{}声明

e.g.10

字符串居中方法

         方法:string.center(len,'x')   如果string长度 > = len那么输出string,不够len那么则将string居中,2端补齐x

方法简介:


e.g.1


e.g.2


e.g.3


e.g.4


e.g.5


e.g.6 脚本练习

words ='HTTP小确幸nihao 1234jpg'
words_digit = '1234561'
words_lower ='http小确幸nihao 1234jpg'
words_upper = 'HTTP小确幸NIHAO  1234JPG'
words_alnum ='aT1 你23'
words_alpha ='aT你好zz'
words_title ='Tabc'
words_space =' '
print('判断数字:',words_digit.isdigit()) #字符串全部内容均为数字才为真
print('判断数字:',words.isdigit()) #判断是否为数字
print('字符串存在大小写混合,判断小写:',words.islower())#判断是否为小写
print('字符串中的字母全部为小写,判断小写:',words_lower.islower())#字符串中的字母全部为小写即可
print('字符串存在大小写混合,判断大写:',words.isupper())#判断是否为大写
print('字符串中的字母全部为大写,判断大写:',words_upper.isupper())#字符串中的字母全部为大写即可
print('判断字母与数字:',words.isalnum())
#isalnum()字符串为大写、小写、数字(此3者为或的关系)则为真,若包含其他则为假,汉字不再判断列表中,字母数字夹杂汉字也为True
print('判断字符串是否仅包含字符和数字,包含其他符号则为False:',words_alnum.isalnum())
#isalpha()判断字符串是否全部为字母,全部为字母(也可包含汉字)则为True,包含数字、空格等符号均为False
print('判断字符串是否为字母,不是:',words_alnum.isalpha())
print('判断字符串是否为字母,是:',words_alpha.isalpha())
#isnumeric()判断字符串仅包含数字,其他任何字符的存在都返回False
print('判断字符串只包含数字,不是:',words_alnum.isnumeric())
print('判断字符串只包含数字,是:',words_digit.isnumeric())
#isspace()判断字符串是否全部为空格,空字符串也为False
print('判断字符串只包含空格,是:',words_alnum.isspace())
print('判断字符串只包含空格,是:',words_space.isspace())
#isdecimal()判断是否为十进制
print('isdecimal,否:',words_alnum.isdecimal())
print('isdecimal,是:',words_digit.isdecimal())
#isidentifier()判断是否有定义 (有疑问)
print('isidentifier,是:',words_alnum.isidentifier())
#isprintable()判断是否可打印 (有疑问)
print('isprintable,是:',words_alnum.isprintable())
#istitle()判断首字母是否大写
print('istitle,是:',words_title.istitle())

e.g.7

l = ['a','b','c']
print(type(l))
res = '-'.join(l)  #以中划线连接
print(res)
print(type(res))

e.g.8 分割字符串

name = 'zhangsan,lisi,wangwu,zhaoliu'
# s = name.split(',')     #以逗号分隔字符串
# print('print s:',type(s))
name_list = name.split(',') #以逗号分隔字符串
print('print name_list:',name_list) #打印name_list
print (type(name_list))  #判断name_list的类型
name_list = name.split('#')
print('print 以#号分割的name_list:',name_list)
print('namelist的index0的value:',name_list[0])
print('判断name_listindex0的类型',type(name_list[0])) 
#以不存在的符号分隔,会将整个字符串保存到list中,那么去list的第1个元素类型为str

运行结果:


e.g.9  字符串格式化的2中方式

# 5.字符串格式化 + 连接 或 %s
username = 'zhansan'
sex = 'male'
age = '18'
addr = 'address'
money = 'milion'
cars = 'car'
words = 'insert into user values ("%s","%s","%s","%s","%s","%s");'%(username,sex,age,addr,money,cars)
print(words)

# 5.字符串转换.format() 需要使用花括号{}先声明
username = 'zhansan'
sex = 'male'
age = '18'
addr = 'address'
money = 'milion'
cars = 'car'
sql = 'insert into user values("{name}","{sex}","{age}","{addr}","{money}","{cars}")'  #不指定列
sql.format(name = username,sex = sex,age = age,addr = addr,money = money,cars = cars)
print(sql.format(name = username,sex = sex,age = age,addr = addr,money = money,cars = cars))

运行结果:


e.g.10  字符串居中

 print('XXXXXXXXXXXXXXXXXXXX'.center(20,'*')) #如果XXXX长度够20那么输入XXXX,不够20那么则将XXXX居中,2端补齐*

九、杂记

杂记

1.针对修改操作,数据变量的分为“可变变量”和“不可变变量”

2.可变变量:变量元素任意修改,如list、字典

3.不可变变量:变量元素不能被修改,如字符串,元组

4.pycharm运行脚本,某行代码出错后,其之后的代码将不再执行;e.g.1

5.元组和列表中没有update()方法

list(列表)使用update()的错误信息:AttributeError: 'list' object has no attribute 'update'

tuple(列表)使用update()的错误信息:AttributeError: 'tuple' object has no attribute 'update'

6.python命令标识符规则:可以以一个字母字符或者一个下划线开头,接下来可以包括任意个字母字符、数字和/或者下划线。但是不允许有奇怪的字符如%$等

7.python大小写敏感命名时一定要注意。标识符只有赋值后才能在代码中使用,未赋值就使用标识符python会指出NameError错误

8.isinstance(),检查某个特定标识符是否包含某个特定类型的数据,如isinstance(a,list),即判断a是否为list类型的数据

e.g.1



十、python中的一些判断规则

python的一些规则

#1.非空即真,非0即真 判断对错返回的boolean类型 boolean e.g.1

    如定义了一个列表,列表不是空列表那么则表示为真,列表,字符串,字典均使用

    只要数值的绝对值大于0均为真

#2.多个变量一起定义赋相同的初始值 ,如: a = b = c = 0 e.g.2

#3.交换变量的方法

      1)引入第三方变量 

           如:a = 1   b = 2 交换ab引入第三个变量c ,c = a  a = b b = c 即可交换a , b的值 

      2)python交换2个变量,python底层实现的第三方交换

            a,b = b,a  

           注:list也可以交换,但是整体交换,见:e.g.3   

      3)不引入第三方变量

            a = 1 b =2  

            a = a+b   # a= 3

            b = a - b  # b = 3-2 = 1

            a = a - b  # a = 3 -1 =2 交换完毕 见 e.g.4


e.g.1
#1_1.非空即真,非0,只要字符串不为空则为真
# name = input('please input your name:').strip()
# a = [] #False
# d = {} #False
# c = 0 #False
# f = tuple() #False
# e = '' #False
# print('a should be False:',bool(a))
# print('d should be False:',bool(d))
# print('c should be False:',bool(c))
# print('f should be False:',bool(f))
# print('e should be False:',bool(e))
# if name:  #name里面是不是有内容
#     print('right')
# else:
#     print('wrong')
#1_2.类型转换 bool()
print('empty string is False:',bool(''))
print('non empty string is True:',bool('a'))
list_empty = []
list_nemp = [1]
print('判断空列表的布尔值:',bool(list_empty))
print('判断非空列表的布尔值:',bool(list_nemp))
print('minus num is true or false?:',bool(-1))

e.g.2

a = b = c = 1 #定义a,b,c3个变量并赋初始值为1
print('print a value:',a)
print('print b value:',b)
print('print c value:',c)
a = a+10
b = b+20
c = c+20
print('print a value:',a)
print('print b value:',b)
print('print c value:',c)

e.g.3 python交换2个变量

a = 1
b = 2
print('打印交换前的ab,打印a >>> %d,打印b >>> %d'%(a,b))
a,b =b,a  #python中的交换两个变量,python底层实现的第三方交换
print('打印交换后的ab,打印a >>> %d,打印b >>> %d'%(a,b))


e.g.4 不借助第三方交换数据


十一、类型转换

类型转换

1.int() #转换成int类型

2.str() #转换成string类型 如:e.g.1

3.list() #转换成list(列表)类型

4.bool() # 转换成布尔类型

5.set()  #转换成集合

e.g.1


十二、集合

集合

1.集合天生去重,e.g.1

2.集合也是无序的

3.定义空集合,s = set() #即定义了一个空的集合

4.{}内部的元素以逗号分隔,带冒号的是集合,如e.g.2

5.集合的操作 ,如e.g.3

       1)取交集(两个集合中相同的部分)

            a.使用 & 符号

            b.使用方法intersection()

       2)取并集  (把两个集合合并在一起,并且去重)

            a.使用 | 符号

            b.使用方法union()  

        3)取差集  (去掉A集合中A与B集合重合的部分)

            a.使用 - 符号

            b.使用方法difference()

        4)对称差集 将2个集合合并然后去掉交集

            a.使用  ^ 符号

            b.使用方法symmetric_difference()

        5)集合添加元素

            方法:add (),如 set.add('value')

         6)随机删除集合元素

             方法:pop(),如set.pop()

         7)删除集合指定元素

            方法:remove(value)  

            说明:若value在集合中不存在,此方法会报错,KeyError: 'value'

          8)更新集合元素

               方法:update(value)

                方法解释:

def update(self, *args, **kwargs): # real signature unknown
    """ Update a set with the union of itself and others. """
    pass


e.g.1 删除list1中 的为奇数的values,list中存在重复元素

列表: l = [1,1,2,3,3,4,5,6,8]

1)直接使用for循环遍历list删除,如下所示:

l = [1,1,2,3,3,4,5,6,8]
for i in l:   #list根据下标取值,此时取到的是l中的值 解决方法重新定义一个一模一样的list
    print('第%d循环都打印一次list >>> %s'%(i,l))
    if i%2!=0:
        l.remove(i)  #
print(l)

问题:重复的奇数没有被删除


原因:list取值是根据下标取值的,第一次获取到的是index为0的数值即1,那么第二个1将往前移动,所以在删除第一个1之后,第二个1的下标变为了0,但此时下标的值已经变为1,所以第二个不会被判断到,后面的3也是同样的道理,那么如何解决呢,请看方法二和方法三,如下所示。


2)定义一个一模一样的list,循环遍历list2,删除list1(会牺牲一点内存空间

l1 = [1,1,2,3,3,4,5,6,8]
print('print l1 memory address:',id(l1))#查看内存地址
l2 = [1,1,2,3,3,4,5,6,8]
print('print l2 memory address:',id(l2))#查看内存地址
for i in l2:   #list根据下标取值,此时取到的是l中的值 解决方法重新定义一个一模一样的list
    print('第%d循环i是list的值都打印一次list >>> %s'%(i,l1))
    if i%2!=0:
        l1.remove(i)  #
print('print romve odd number:',l1)

运行结果:


3)定义一个集合,遍历集合元素,删除list中的元素




     

e.g.2    {}内部的元素以逗号分隔,带冒号的是集合
 
e.g.3集合操作
#1_2.将字符串转换成集合,并且去重
ss='1234342q231a38'
sss = set(ss)
print('打印集合sss:',sss)
#s3 = {1,2,3,4,5}  print(ss & s3)   类型不一致,错误信息:TypeError: unsupported operand type(s) for &: 'str' and 'set'
s4 = {'1','2','3','w'}
print('打印type(s4)',type(s4))
#取交集 &
print(sss & s4)  #方法一
print(sss.intersection(s4)) #方法二

#取并集    把两个集合合并在一起,并且去重

print('并集方法1:',sss | s4)   #方法一
print('并集方法2:',sss.union(s4))   #方法二

#取差集  去掉A集合中A与B集合重合的部分
print('差集方法1:',sss - s4)   #方法一
print('差集方法2:',sss.difference(s4))   #方法二
print('差集方法1:',s4 - sss)   #方法一

#对称差集 将2个集合合并然后去掉交集
print('对称差集方法1:',sss ^ s4)   #方法一
print('对称差集方法2:',sss.symmetric_difference(s4))   #方法二

添加元素



随机删除元素



删除某个元素



更新集合元素






十三、参考链接

      牛牛杂货铺:http://www.nnzhp.cn/archives/162






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值