字符串、列表、元组、字典、集合-内置方法

一、字符串类型

  1.定义

    msg='hello'        # msg=str('msg'),此时为字符串类型

  2.类型转换

    str可以把任意其他类型都转成字符串 # res=str({'a':1}) 此时就把字典转为字符串了

  3.内置方法一

    3.1 按索引取值(正向取+反向取) 

msg = 'hello world'
#正向取
print(msg[0])
print(msg[5])
#反向取
print(msg[-1])

#此时结果为:h  空  d  ,一个字母占一个索引位置,空格也是

    3.2 切片:切片:索引的拓展应用,从一个大字符串中拷贝出一个子字符串

msg = 'hello world'
# 顾头不顾尾
res=msg[0:5] #x
print(res)
print(msg)

# 步长
res=msg[0:5:2] # 0 2 4
print(res) # hlo

# 反向步长
res=msg[5:0:-1]
print(res) #" olle"

msg = 'hello world'
res=msg[:]     # res=msg[0:11]
print(res)

res=msg[::-1] # 把字符串倒过来
print(res)

    3.3 长度:len()

msg='hello world'
print(len(msg))

    3.4 成员运算in和not in

      # 判断一个子字符串是否存在于一个大字符串中
print("alex" in "alex is sb")
print("alex" not in "alex is sb")

    3.5 移除字符串左右两侧的符号strip,默认去掉的空格

msg='      aaa      '
res=msg.strip()
print(msg) # 不会改变原值
print(res) # 是产生了新值

# 默认去掉的空格
msg='****aaa****'
print(msg.strip('*')) #aaa

# 了解:strip只取两边,不去中间
msg='****e*****gon****'
print(msg.strip('*')) # e*****gon

msg='**/*=-**aaa**-=()**'
print(msg.strip('*/-=()')) #aaa
 

      3.5.1 实际应用

#应用:防止用户输入不规范
inp_user=input('your name>>: ').strip() # inp_user=" egon"
inp_pwd=input('your password>>: ').strip()
if inp_user == 'egon' and inp_pwd == '123':
    print('登录成功')
else:
    print('账号密码错误')

    3.6:切分split:把一个字符串按照某种分隔符进行切分,得到一个列表

# # 默认分隔符是空格
info='aaa 18 male'
res=info.split()
print(res)                    #['aaa', '18', 'male']

# # 指定分隔符
info='aaa:18:male'
res=info.split(':')
print(res)                    #['aaa', '18', 'male']
 
# 指定分隔次数
info='aaa:18:male'
res=info.split(':',1)
print(res)                  #['aaa', '18:male']

    3.7 循环

info='egon:18:male'
for x in info:
    print(x)               #每个字母包括符号都打印

  

  4.内置方法二

# strip,lstrip,rstrip
msg='***egon****'
print(msg.strip('*'))            #egon
print(msg.lstrip('*'))           #egon****     去除左边的
print(msg.rstrip('*'))           #***egon      去除右边的

# lower,upper                    #转为大小写
msg='AbbbCCCC'
print(msg.lower())
print(msg.upper())

# startswith,endswith
print("alex is sb".startswith("alex"))
print("alex is sb".endswith('sb'))

# format格式化

#split,rsplit:将字符串切成列表
info="egon:18:male"
print(info.split(':',1))         # ["egon","18:male"]
print(info.rsplit(':',1))        # ["egon:18","male"]

#join: 把列表拼接成字符串
l=['egon', '18', 'male']
res=l[0]+":"+l[1]+":"+l[2]
#res=":".join(l)              # 按照某个分隔符号,把元素全为字符串的列表拼接成一个大字符串
print(res)

# replace 替换
msg="you can you up no can no bb"
print(msg.replace("you","YOU",))
print(msg.replace("you","YOU",1))             #只替换第一个
 
#isdigit 
# 判断字符串是否由纯数字组成,num1=b'4' #bytes    num2=u'4' #unicode,python3中无需加u就是unicode    num3='四' #中文数字     num4='Ⅳ' #罗马数字,此时只能识别num1,num2
#isnumberic 可以识别num2,num3,num4
#isdecimal只能识别:num2

print('123'.isdigit()) #True
print('12.3'.isdigit())               #False


#综合应用
age=input('请输入你的年龄:').strip()
if age.isdigit():
    age=int(age)          # int("abbab")
    if age > 18:
        print('大了')
    elif age < 18:
        print('小了')
    else:
        print('对了')
else:
    print('必须输入数字')

  5.内置方法其他

# find,rfind,index,rindex,count
msg = 'hello egon hahaha'
# 找到返回起始索引
# print(msg.find('e')) # 返回要查找的字符串在大字符串中的起始索引
# print(msg.find('egon'))
# print(msg.index('e'))
# print(msg.index('egon'))

# 找不到
# print(msg.find('xxx'))      # 返回-1,代表找不到
# print(msg.index('xxx'))     # 抛出异常

# msg='hello egon hahaha egon、 egon'
# print(msg.count('egon'))    #计数

# center,ljust,rjust,zfill
print('egon'.center(50,'*'))              #居中***********************egon***********************
print('egon'.ljust(50,'*'))               # egon**********************************************
print('egon'.rjust(50,'*'))               # **********************************************egon
print('egon'.zfill(10))                   # 000000egon

#expandtabs
msg='hello\tworld'
print(msg.expandtabs(2))       # 设置制表符代表的空格数为2   hello world

# captalize,swapcase,title
print("hello world egon".capitalize())     #Hello world egon   第一个首字母大写
print("Hello WorLd EGon".swapcase())       #hELLO wORlD egON  大小写互换 
print("hello world egon".title())          #Hello World Egon   全部首字母大写

# is数字系列
# is其他
# print('abc'.islower())
# print('ABC'.isupper())
# print('Hello World'.istitle())
# print('123123aadsf'.isalnum())       # 字符串由字母或数字组成结果为True
# print('ad'.isalpha())                # 字符串由由字母组成结果为True
# print('     '.isspace())             # 字符串由空格组成结果为True
# print('print'.isidentifier())
# print('age_of_egon'.isidentifier())
# print('1age_of_egon'.isidentifier())

 

二、列表类型

  1.定义

    l=[1,1.2,'a'] # l=list([1,1.2,'a'])

  2.类型转换

    但凡能够被for循环遍历的类型都可以当做参数传给list()转成列表

  3.内置方法:索引、切片、长度、成员运算等与字符串一样

    3.1 向列表中添加值

# 追加
l=[111,'egon','hello']
l.append(3333)
l.append(4444)
print(l)                     #[111, 'egon', 'hello', 3333, 4444]依次添加在后面

# 插入值
l=[111,'egon','hello']
l.insert(0,'alex')
print(l)                      #根据索引插入

#添加列表
#new_l=[1,2,3]
# l=[111,'egon','hello']
# l.append(new_l)
# print(l)

# 代码实现
# new_l=[1,2,3]
# for item in new_l:
#     l.append(item)
# print(l)                      #['alex', 111, 'egon', 'hello', 1, 2, 3]

# extend实现了上述代码
new_l=[1,2,3]
l.extend(new_l)
l.extend('abc')
print(l)                          #['alex', 111, 'egon', 'hello', 1, 2, 3, 'a', 'b', 'c'],extend拆开一个一个加进去

    3.2删除

# 方式一:通用的删除方法,只是单纯的删除、没有返回值
# l = [111, 'egon', 'hello']
# del l[1]
# x =del l[1]      # 抛出异常,不支持赋值语法
# print(l)
 
# 方式二:l.pop()根据索引删除,会返回删除的值
# l = [111, 'egon', 'hello']
# l.pop() # 不指定索引默认删除最后一个
# l.pop()
# print(l)
# res=l.pop(1)
# print(l)
# print(res)
 
# 方式三:l.remove()根据元素删除,返回None
# l = [111, 'egon', [1,2,3],'hello']
# l.remove([1,2,3])
# print(l)
# res=l.remove('egon')
# print(res)            # None

    3.3其他

l = [1, 'aaa', 'bbb','aaa','aaa']
#l.count()
# print(l.count('aaa'))    #统计个数
 
#l.index()
# print(l.index('aaa'))              #找索引
# print(l.index('aaaaaaaaa'))   # 找不到报错
 
#l.clear()
# l.clear()                 #删除
# print(l)
 
#l.reverse()               #不是排序,就是将列表倒过来
# l = [1, 'egon','alex','lxx']
# l.reverse()
# print(l)
 
# 5、l.sort()                #列表内元素必须是同种类型才可以排序
# l=[11,-3,9,2,3.1]
# l.sort()                    # 默认从小到大排,称之为升序
# l.sort(reverse=True) # 从大到小排,设置为降序
# print(l)
 
# l=[11,'a',12]
# l.sort()
 
# l=['c','e','a']
# l.sort()
# print(l)

    3.4补充

#队列:FIFO,先进先出
l=[]
# 入队操作
l.append('first')
l.append('second')
l.append('third')

print(l)
# # 出队操作
print(l.pop(0))       #first
print(l.pop(0))       #second
print(l.pop(0))       #third


#堆栈:LIFO,后进先出
l=[]
# 入栈操作
l.append('first')
l.append('second')
l.append('third')

print(l)
# 出队操作
print(l.pop())              #third
print(l.pop())              #second
print(l.pop())              #first

 

三、元组类型

  1.定义

    ()内用逗号分隔开多个任意类型的元素,t=(1,1.3,'aa')        # t=tuple((1,1.3,'aa'))   #######     t=(10,) # 如果元组中只有一个元素,必须加逗号

  2.作用

    元组就是"一个不可变的列表"。作用:按照索引/位置存放多个值,只用于读不用于改

  3.类型转换

# print(tuple('hello'))
# print(tuple([1,2,3]))
# print(tuple({'a1':111,'a2':333}))

  4.内置方法:索引、切片、长度、成员运算符、循环等于上面字符串一样

 

四、字典类型

  1.定义

   {}内用逗号分隔开多个key:value,其中value可以使任意类型,但是key必须是不可变类型,且不能重复

  2.造字典的方式

#方式一
# f={} # 默认定义出来的是空字典
#
d={'k1':111,(1,2,3):222} # d=dict(...) # print(d['k1']) # print(d[(1,2,3)]) # print(type(d))

#方式二
# d=dict(x=1,y=2,z=3)
# print(d,type(d))
 
 #方式三
info=[
     ['name','egon'],
     ('age',18),
     ['gender','male']
 ]
d={}
for k,v in info: # k,v=['name','egon'],
  d[k]=v
print(d)
 
res=dict(info) # 一行代码搞定上述for循环的工作
print(res)
 
  #方式四
keys=['name','age','gender']
d={}
for k in keys:
d[k]=None
print(d)
#d={}.fromkeys(keys,None) # 一行代码搞定上述for循环的工作
print(d)

  3.内置方法一:长度、成员运算符与上面一样

    按key存取

按key存取值:可存可取
# d={'k1':111}
# 针对赋值操作:key存在,则修改
# d['k1']=222
# 针对赋值操作:key不存在,则创建新值
# d['k2']=3333
# print(d)

d={'k1':111,'k2':2222}
#d.keys()         ['k2', 'k1']
#d.values()        [2222, 111]
#d.items()         [('k2', 2222), ('k1', 111)]
#dict(d.items())     {'k2': 2222, 'k1': 111}

    删除

d={'k1':111,'k2':2222}
#通用删除
# del d['k1']
# print(d)
 
#pop删除:根据key删除元素,返回删除key对应的那个value值
# res=d.pop('k2')
# print(d)
# print(res)
 
# popitem删除:随机删除,返回元组(删除的key,删除的value)
# res=d.popitem()
# print(d)
# print(res)

    for循环

d={'k1':111,'k2':2222}
for k in d.keys():
    print(k)

for k in d:               #和d.keys()一样
    print(k)

for v in d.values():
    print(v)

for k,v in d.items():
    print(k,v)


print(list(d.keys()))
print(list(d.values()))
print(list(d.items()))

  4.内置方法二

d = {'k1': 111}
# 1、d.clear()

# 2、d.update()
# d.update({'k2':222,'k3':333,'k1':111111111111111})
# print(d)

# 3、d.get() :根据key取值,容错性好
# print(d['k2'])  # key不存在则报错

# print(d.get('k1')) # 111
# print(d.get('k2')) # key不存在不报错,返回None

# 4、d.setdefault()
# info={}
# if 'name' in info:
#     ... # 等同于pass
# else:
#     info['name']='egon'
# print(info)

# 4.1 如果key有则不添加,返回字典中key对应的值
info = {'name': 'egon'}
res = info.setdefault('name', 'egon')
print(info)
print(res)

# 4.2 如果key没有则添加,返回字典中key对应的值
info = {}
res = info.setdefault('name', 'egon')
# print(info)
print(res)

 

五、集合(set)

  1.关系运算,去重,集合里面的元素不能重复

# friends1 = ["zero","kevin","jason","egon"]
# friends2 = ["Jy","ricky","jason","egon"]
#
# l=[]
# for x in friends1:
#     if x in friends2:
#         l.append(x)
# print(l)

  2.定义

    在{}内用逗号分隔开多个元素,多个元素满足以下三个条件
      1. 集合内元素必须为不可变类型
      2. 集合内元素无序
      3. 集合内元素没有重复

  3.关系运算

friends1 = {"zero","kevin","jason","egon"}
friends2 = {"Jy","ricky","jason","egon"}
 
#取交集:两者共同的好友
# res=friends1 & friends2
# print(res)
# print(friends1.intersection(friends2))

# 取并集/合集:两者所有的好友
# print(friends1 | friends2)
# print(friends1.union(friends2))
 
# 取差集:取friends1独有的好友
# print(friends1 - friends2)
# print(friends1.difference(friends2))
 
# 取friends2独有的好友
# print(friends2 - friends1)
# print(friends2.difference(friends1))
 
# 对称差集: 求两个用户独有的好友们(即去掉共有的好友)
# print(friends1 ^ friends2)
# print(friends1.symmetric_difference(friends2))
 
# 父子集:包含的关系
# s1={1,2,3}
# s2={1,2,4}
# 不存在包含关系,下面比较均为False
# print(s1 > s2)
# print(s1 < s2)
 
# s1={1,2,3}
# s2={1,2}
# print(s1 > s2) # 当s1大于或等于s2时,才能说是s1是s2父级
# print(s1.issuperset(s2))
# print(s2.issubset(s1))   # s2 < s2  =>True
 
# s1={1,2,3}
# s2={1,2,3}
# print(s1 == s2) # s1与s2互为父子
# print(s1.issuperset(s2))
# print(s2.issuperset(s1))

  4.去重

1、只能针对不可变类型去重
# print(set([1,1,1,1,2]))
 
# 2、无法保证原来的顺序
# l=[1,'a','b','z',1,1,1,2]
# l=list(set(l))
# print(l)
 
 
l=[
    {'name':'lili','age':18,'sex':'male'},
    {'name':'jack','age':73,'sex':'male'},
    {'name':'tom','age':20,'sex':'female'},
    {'name':'lili','age':18,'sex':'male'},
    {'name':'lili','age':18,'sex':'male'},
]
new_l=[]
for dic in l:
    if dic not in new_l:
        new_l.append(dic)
# print(new_l)

  5.其他

s={1,2,3}
# 需要掌握的内置方法1:discard
# s.discard(4) # 删除元素不存在do nothing
# print(s)
# s.remove(4) # 删除元素不存在则报错
 
 
# 需要掌握的内置方法2:update
# s.update({1,3,5})
# print(s)
 
# 需要掌握的内置方法3:pop
# res=s.pop()
# print(res)
 
# 需要掌握的内置方法4:add
# s.add(4)
# print(s)
 
 

res=s.isdisjoint({3,4,5,6}) # 两个集合完全独立、没有共同部分,返回True
print(res)
 
# s.difference_update({3,4,5}) # s=s.difference({3,4,5})
# print(s)  #{1, 2}取s里面与{3,4,5}不一样的元素

 

 

 

 

 

 

posted @ 2022-03-25 22:19  新入世界的小白  阅读(42)  评论(0编辑  收藏  举报