zoukankan      html  css  js  c++  java
  • Python列表,字典和字符串操作

    列表:

    列表:list, 也叫数组,表现[].
    特点:有角标,元素可以重复,有序的元素

    例子:
    stus = ['王志华','乔美玲','乔美玲','王文文','feixiang']#中括号,这就是一个list;
    只有加了引号就是字符串儿(如stus = ‘['王志华','乔美玲','乔美玲','王文文','feixiang']’)
    下标:中括号中每个名字的序数,也称角标,索引
    元素:列表中各个内容,如王志华
    !特别注意,下标是从0开始的。

    stus2 = []
    stus3 = list()
    #都是定义空的list

    增加元素(俩种方法,末尾和指定位置)
    stus.append('赵燕')#在list末尾增加一个元素
    stus.insert(0,'杨静')#在指定下标位置增加元素。
    stus.insert(20,'蔡进')如果指定位置不存在,会加在末尾

    print('stus的长度是',len(stus))#取元素个数


    stus[3] = '蔡康永'#找到下标,直接赋值更改
    print('改完之后的',stus)
    print(stus[-1])#负表示从后边开始数,用于查找后边数据


    删除
    stus.pop()#pop默认删除最后一个元素
    stus.pop(2)#删除角标为2,即第三为元素
    stus.remove('乔美玲')#删除输入的元素
    stus.pop(8)#下标8的元素不存在,会报错
    stus.remove('乔美')#乔美元素不在列表,会报错
    del stus[-1]#也是删除指定的元素
    stus.clear()#清空


    result= stus.count('乔美玲')#查询输入元素在list里面出现的次数
    result= stus.count('乔美')#不存在的元素,会出现0
    no = stus.index('乔美玲')#找元素的下标
    no2 = stus.index('乔美玲')#list中有俩个或几个,只会返回最前边一个的下标
    no3 = stus.index('乔美')#找不在表中元素的下标,会报错
    stus.reverse()#反转(转置)
    stus.sort()#排序,按字母数字排的,文字没法排
    nums = [3,6,2,6,3,9,1]
    # nums.sort()
    # nums.reverse()
    # nums.sort(reverse=True)#排序后又反转,会改变排序方式
    nums.extend(stus)#把一个list的元素加入到另一个list
    # print(nums)

    布尔类型
    True False

    print(1>2)
    if '乔美玲' in stus:#也可以用 if stus.count('乔美玲') is not 0:
    print('同学存在')
    else:
    print('同学不存在')

    stus = ['杨静', '王志华', '王银梅', '乔美玲','段鑫琪', '王立文', '赵燕','杨华', '周永波', '杨静']
    for s in stus:#列表直接循环,是取的元素。
    print('s的值是%s'%s)
    如果直接循环一个list,那么每次取值的就是list里边的每个元素。
    for i in range(len(stus)):
    print(i)

    index = 0
    while index < len(stus):
    print(index)
    index += 1
    p = xpinyin.Pinyin()
    for s in stus:
    stu_pinyin = p.get_pinyin(s,'')
    print(stu_pinyin)

    for i in range(len(stus)):
    print('下标是%s,值是%s'%(i,stus[i]))

    for index,stu in enumerate(stus):#同时取到下标和值
    print('%s ==> %s'%(index,stu))

    for index,stu in enumerate(stus,1):#同时取到下标和值,加1取下标从1开始
    print('%s ==> %s'%(index,stu))

    choice = ['注册','登录','退出','购物']
    print('输入编号进入对应的操作')
    for index,c in enumerate(choice,1):
    print('%s ==> %s'%(index,c))

    多维数组
    stu2 = [1,2,3,4,['a','b','c',['哈','哈哈']]] #三维数组
    print(stu2[4][1])#一层层找,先找到第一层的第4个元素,再第二层的第1个元素,这个结果为b
    print(stu2[4][3][1])#一层层找,先找到第一层的第4个元素,再第二层的第3个元素,然后第三层的第一个元素,这个结果为哈哈
    stu2[4][3].insert(1,'蔡进')#一层层找,先找到第一层的第4个元素,再第二层的第1个元素
    #print(stu2)

    切片:list取值的一种方式,它指定范围取值
    stu4 = [1,2,3,4,5,6,7,8]
    #print(stu4[2:5])#切片取值,顾头不顾尾。即没有取到6.
    #print(stu4[:5])#从最前面开始取
    #print(stu4[2:8])#取到8,比最后一位的角标大一位
    #print(stu4[2:])#取到最后面
    #new_stu = stu4[:]#复制了一个新的list
    #print(stu4[:])
    #print(stu4[0:8:2])#隔一个取一个,2是步长,写的2,实际上跳过了1个。为1时不用跳
    #print(stu4[0:8:-1])#变成了空
    #print(stu4[::-1])#步长为负数的时候,为从右往左取值
    #print(stu4[-1:-9:-2])#前边加数组,且不为负数时,变成了空。
    #new_stu = stu4#下节课讲

    #下标、切片、长度、循环 同样适用于字符串,但不能修改。
    #name = '马上要吃饭了'
    #print(name[3],len(name))
    #for i in range(len(name)):
    # print(i)


    字典: 列表很难存储大量信息,用起来也不方便,而且效率很低,就引入了字典。# stus=['王志华','乔美玲','段鑫琪','王立文']# stu_info = [

    # ['王志华','18''女''address']
    #     ['乔美玲','18''女''address']
    # ['段鑫琪','18''女''address']
    # ['王立文','18''女''address']
    # ]
    # for stu in stu_info:
    # if stu[1] == "乔美玲":


    字典:
    #stu_info = {'name':'王志华','age':'18','addr':'北京'}#大括号,字典;是key-value形式
    !字典里边的key是唯一的,否则后边的会覆盖前边的;
    !元素是乱序的。

    取值
    # print(stu_info)#取字典
    # print(stu_info['name'])#取key为name是的值
    # print(stu_info['age'])#取key为age时的值
    !jason同字典外观一样,但jason就是字符串儿,只是个格式长得非常像。


    # print(stu_info)
    # print(stu_info['name'])#查name的value,不存在时会报错
    # print(stu_info.get('name',500))#.get后边可以指定不存在时报的结果,会出现500
    加.get,当key存在时,跟没get是一样的。
    但不存在时,会报None,即空空的,也不报错。但没get的会报错。
    # print(stu_info['age'])

    修改
    # stu_info['addr']='上海'#直接复制修改
    # print(stu_info)

    新增
    #stu_info['phone']='1233434'#key不存在时,会新增 #不安全,存在时会改变phone的值。
    # stu_info.setdefault('email','ddd@163.com')#key不存在时会新增,存在时不改变
    !stu_info.setdefault('age','19')#key存在时,值不会新定义
    # print(stu_info)

    删除
    #stu_info.pop('phone')
    #stu_info.clear()#清空这个字典
    #stu_info.popitem()#从字典里面随机删除一个元素
    #print(stu_info)
    #字典没有顺序

    # d1={}
    # d2={'a':'v'}
    # d1.update(d2)#把d1更新为d2
    # print(d1)

    # print(stu_info.keys())#取所有的key
    # print(stu_info.values())#取所有的value
    # print(stu_info.items())#取所有的元素

    直接循环字典,看看每次循环的是字典的key
    # for k in stu_info:#循环字典,叫啥无所谓,循环的是key
    # print(k)

    判断
    #print('name' in stu_info)#判断这个key存不存在
    #print('name' in stu_info.keys())#判断这个key存不存在,需要将所有的key拿出来列表再判断,没上边的快。

    #for i in stu_info:#循环字典,叫啥无所谓,循环的是key,比下边的方法快
    # s='%s=>%s'%(i,stu_info.get(i))
    # print(s)

    # for j,v in stu_info.items():#俩个值,取key和value。因为需要列表,所有很慢
    # b='%s=>%s'%(j,v)
    # print(b)

    多维字典:
    # stu_info={
    # '小明':{'passwd':'123456','phone':'132323','age':'18'},
    # '小黑':{'passwd':'223456','phone':'232323','age':'28'}
    # }
    # print(stu_info['小明']['phone'])#层层定位再取值

    d = {
    '春波':{
    "car":{'BMW':5,'BENZ':3,'audi':3,'byd':4},
    "house":["北京",'南京','上海'],
    "money":1000000,},
    '乔美玲':{
    "bag":['xx','lv',],
    "house":['三环','4环'],
    "hzp":['skii','ysl'],
    'language':{
    '普通话':10,
    '东北话':20,
    '日语':0,
    '英语':4
    }
    }
    }
    #马春波卖了一套上海的房子,卖了500万
    # d['春波']['house'].pop(2)
    # d['春波']['money']+=5000000
    #算一下马春波有多少辆车
    #m=d['春波']['car'].values()
    #马春波花了100万买了一辆劳斯莱斯

    #乔美玲的东北话降级了,从20变成了10

    #乔美玲会哪些语言

    #print(d)


    字符串
    t='user1,user2,user3,user4,user5,user6,user7'
    print('分隔符',t.split(','))#取列表,按照某个字符来分割字符串儿
    print('',t.split())#什么都不传,按空格分开。没有空格就认为是一个元素

    cars = ['ad','cd','ef']
    print('、'.join(cars))#以某个字符把list中的元素连起来,变成一个字符串儿。跟split全反

    s='a... adbDEF'
    print(s.strip()) #默认去掉字符串俩边的空格和换行符
    new_s = s.strip('.')#加了点,就字符串最俩边的点儿也可以去掉
    print(new_s)
    print(s.rstrip())#去右边的
    print(s.lstrip())#去左边的
    print(s.count('.'))#某个字符串出现的次数
    print(s.index('a'))#找某个字符串下标,不存在会报错
    print(s.find('c'))#找某个字符串下标,不存在会返回-1
    print(s.replace('adb','ABC',1))#替换,数字代表几个
    print(s.upper())#变成大写
    print(s.lower())#变成小写
    print(s.capitalize())#首字母大写
    print(s.startswith('p'))#判断是不是以p开头的
    print(s.endswith('p'))#判断是不是以p结尾的
    print(s.islower())#判断是否小写
    print(s.isupper())#判断是否大写
    print(s.istitle())#判断是不是标题(首字母是不是大写)
    print(s.isdigit())#判断是不是整数
    print(s.center(50,'*'))#放在50个字符中间,字符不够,用*来凑
    s2='abc123'
    print(s2.isalpha())#判断是不是全字母或汉字,不能有数字
    print(s.isspace())#判断是否全部都是空格
    print(s.isalnum())#没有特殊字符,返回True
    print(s.isidentifier())#判断是不是一个合法变量名

    #用.format来格式化字符串。用{}来占位,不用一一对应
    #目标:输出字符串 insert into user VALUE (username,password,addr,email,phone)
    #第一种格式化字符串
    s='insert into user VALUE ({username},{password},'
    '{addr},{email},{phone}); '
    new_s = s.format(addr='北京',phone=1223,email='niu@qq.com',username='niuhanyang',password='12345')
    print(new_s)

    #第二种格式化字符串
    s='insert into user VALUE ({username},{password},'
    '{addr},{email},{phone}); '
    d = {'addr': '北京', 'username': 'xiaohei', 'password': '12345', 'email': 12,
    "phone": 'sdfs'}
    s_map=s.format_map(d)
    print(s_map)


    l = [1,2,3,4,5,6,7,8,9,10]
    for i in l:
    res='0'+str(i)
    print(res)

    t='user1,user2,user3, user4,user5,user6,user7'
    print('传分隔符',t.split(','))#按照某个字符来分割字符串儿
    print('什么都不传',t.split())#什么都不传,按空格分开。没有空格就认为是一个元素

    cars = ['ad','cd','ef']
    print('、'.join(cars))#以某个字符把list中的元素连起来,变成一个字符串儿。跟split全反
    print(str(cars))#看着没有区别,但已经变成了字符串

    replace strip join split isdigit upper lower format startswith endswith count
    这几个必须记住,很常用


  • 相关阅读:
    java 数据结构容器之HashSet
    java LinkedList模拟堆栈
    Java实现windows7标准型计算器
    Java迭代器注意事项
    (动态规划求解)聪明的kk
    三张图讲清楚Java中的方法的参数传递机制
    Java对象在内存中的表示
    两张内存变化图揭秘二维数组的初始化
    四张內存变化图揭秘引用类型数组的初始化
    三张內存变化图揭秘基本类型数组的初始化
  • 原文地址:https://www.cnblogs.com/fangfangzhang/p/10004785.html
Copyright © 2011-2022 走看看