• 第3课:列表和字典的增删改查、字符串常用方法、文件操作


    1.  
    1)列表的增删改查
    stus = ['1','2','3']
    #增
    stus.insert(0,'茄茄')
    stus.insert(9,"茄茄1")    #序号超出序列长度,默认加到最后
    stus.insert(-1,"茄茄2")   #这里需注意,-1默认插到最后一个。
    print(stus)
    #删
    stus.pop() #传参:下标;默认删除最后1个元素;若指定下标,则删除指定元素;若指定的下标不存在,报错。
    stus.pop(1)
    print(stus.pop())  #返回删除的值
    stus.remove("1") #传参:元素;删除list中指定的元素,如果有多个删除第1个;无返回值。
    del stus[0]  #删除指定下标的元素
    stus.clear()  #清空lis
    #改
    stus[0] = 'qieqie'
    print(stus)
    #查看
    print(stus)
    print(stus[-1])
    print(stus.count("茄茄")) #查找某个元素在列表中出现的次数,如果不存在,返回0
    print(stus.index("茄茄")) #查找某个元素的下标,如果有多个元素,返回第一个元素下标;如果查找的元素不存在,运行时会报错
    2)列表的其它方法
    stus.reverse() #反转list
    print(stus)
    stus.sort()  #默认升序;字符串按ASCII码排,数字按大小排。
    num = [9,31,345,367,299,789,100]
    num.sort()  #排序有个前提:元素必须都是同类型的才能排序成功。
    num.sort(reverse=True) #按降序排
    

     3)多维列表

    all_nums = [123,456,[789,11,10]]
    three = [123,456,[789,11,10,["hahaha",'1234']]]
    print(three[-1][-1][0]) #取元素hahaha
    all_nums.extend(three) #合并2个list,把three加在all_nums后面
    print(all_nums)
    

      4)切片:list取值的一种方式,顾头不顾尾

     1 nums = [1,2,3,4,4,5,6,7,8]
     2 print(nums[::2])
     3 print(nums[:6])#如果切片前面一个值不写的话,从开头取
     4 print(nums[3:])##如果切片后面的值不写的话,取到末尾
     5 print(nums[:])#如果前面的值和后面的值都不写的话,全取过来
     6 
     7 print(nums[::-1]) #步长是负数,从右往左取;反之从左往右取
     8 #特殊情况
     9 print(nums[0:8:-1]) #这样取出来的是空,因为步长为负数,从右往左查找,找不到下标0和8
    10 切片同样适用于字符串,字符串也有下标
    11 title = "今天发苹果"
    12 print(title[:4])
    13 #对于1个list,既要取下标又要取元素值,就可以用enumerate
    14 for i,v in enumerate(title):
    15     print("%s:%s"%(i,v))

      5)综合练习题:

     1 #注册:username,passwd
     2 all_users = []
     3 while True:
     4     username = input("请输入用户名:")
     5     if username not in all_users:
     6     #if all_users.count(username) == 0:
     7         passwd = input("请输入密码:")
     8         all_users.append(username)
     9         print("注册成功")
    10     else:
    11         print("该用户名已注册")

     6)元组:是一种特殊的list,只能查,不能增删改

    1 a = (1)
    2 b = ('ssss')
    3 c = (1,2,3,4)
    4 print(c)
    5 print(c[0:3])  #元组也能使用切片
    6 mysql = ('127.0.0.1','3307','my','root','123456')
    7 mysql.count('my') #计数
    8 mysql.index('my') #返回元素下标

     7)非空/None即真;非0即真

     1 a = ''
     2 b = 11
     3 if a:
     4     print("")
     5 else:
     6     print("")
     7 if b:
     8     print("")
     9 else:
    10     print("")

     2.  

     1)字典:取值方便,速度快

    dict={
            'name':'qieqie',
            'age':'18',
            'sex':'',
            'addr':'昌平区',
            'money':'20K',
            'huazhuagnpin':{
                '神仙水':80000
            }
        }
        #dict[0]['jinku']['$']
        dict = {
            'name': 'qieqie',
            'age': '18',
            'sex': '',
            'addr': '昌平区',
            'money': '20K',
            "bag":{
                "lv":10
        }
    
        dict = {
            'name': 'qieqie',
            'age': '18',
            'sex': '',
            'addr': '昌平区',
            'money': '20K'
        }
        stus = {
            'ybq':{
                'name': 'qieqie',
                'age': '18',
                'sex': '',
                'addr': '昌平区',
                'money': '20K',
                "jinku":{
                    '建行卡':80000,
                    '工行卡':800000,
                    '招行卡':8000000
                }
            }
        }
      #两种取和方式
        sumall = 0
        for i in stus['ybq']['jinku'].values():
            sumall+=i
        print(sumall)
        print(sum(stus['ybq']['jinku'].values()))
      #易错点
        print(stus['ybq']['jinku'].values()[0]) #这种写法会报错TypeError: 'dict_values' object does not support indexing
        dict_values([80000, 800000, 8000000])  #这种直接用下标取值会报错,但是可以直接循环
        print(dict.get('namme1'))
      #
      d['shengao']=198  
       d.setdefault('weight',130)  #d.setdefault(key[,default])如果键值在字典中,返回该键对应的值;如果不在,返回default的值,默认为None
    
        #删除字段的值
        dict.pop('age') #删除指定的key和它的value
        print(dict)
        dict.popitem() #随机删除1个
        print(dict)
        del dict['age'] #删除字典指定key和它的value
        dict.clear() #清空字典
      #修改字典的值
        dict['age'] = 20 #如果此key存在,修改它的值,如果不存在,新增1个元素
        print(dict)
        #
        dict.keys() #获取字典中所有的keys
        dict.values() #获取字典中所有的values
        print(dict.items()) #把字典转成二维list数组,效率低
     # d.has_key('addr') #python2里面字典有这个方法,有没有这个key
        if 'addr' in d     :#判断key是否在这个字典里
             print('addr')
    
        #这种遍历方式效率较低
        for k,v in dict.items():
            print("k=%s,v=%s"%(k,v))
        #高效的遍历字段的方法:
        for k in dict:
            print(k,dict[k])
    
        print(dict.items())#直接打印看上去像个二维list数组,实际上不是的
        print(dict.items()[0])#这种写法会报错,需要先将其强制转换为list
        res = list(dict.items())
        print(res[0])

     2)综合练习题

    #账号/密码/密码确认
    #非空
    #已经存在的不能注册
    all_user = {}
    while True:
        username = input("请输入用户名:").strip()
        passwd = input("请输入密码:").strip()
        spasswd = input("请再次输入密码:").strip()
        if username and passwd and spasswd:
            if username in all_user:
                print("用户名已存在")
            else:
                if passwd == spasswd:
                    all_user[username]=passwd
                    print("注册成功")
                    break
                else:
                    print("两次输入的密码不一致")
        else:
            print("用户名或密码或确认密码不能为空")
    #登录程序:
          #1.非空
          #2.如果输入的用户名不存在,要提示
    all_user = {'1':'1','2':'2'}
    while True:
        name = input("请输入用户名:").strip()
        pwd = input("请输入密码:").strip()
        if name and pwd:
            if name not in all_user.keys():
                print("用户名不存在")
            else:
                    if all_user[name] == pwd:
                        print("恭喜,登录成功")
                        break
                    else:
                        print("用户名或密码有误")
        else:
            print("用户名或密码不能为空")

     3)小结和需注意的点:

    #可变变量:list 字典
    #不可变变量:一旦创建,不能修改的变量:元组,字符串
    s = 'abcefg'
    print(s[3])
    s[3] = 'd' #这种写法有误
    
    #运行结果为:1 2 4 6 8:循环list时尽量不要做删除操作
    li = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    li = [1, 11, 3, 33, 4, 5, 6, 7, 8, 9]
    for i in li:
        if i % 2 != 0:
            li.remove(i)
    print(li)
    #替代方法:
    li = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    #li2 = li[:] #深拷贝,内存地址会变
    li2 = li #浅拷贝,内存地址不会变
    print(id(li))
    print(id(li2))
    for i in li2:
        if i % 2 != 0:
            li.remove(i)
    print(li)

    3.  字符串常用的方法

    #字符串的这些方法都不会改变原来字符串的值
    name = '   besttest   ok1ok
    '
    print(name.strip()) #默认去掉首尾空格和换行符返回一个新的字符串
    print(name)
    new_name= name.strip('ok') #去掉ok
    #new_name = name.lstrip()#默认去掉左边的空格和换行符
    #new_name = name.rstrip()#默认去掉右边的空格和换行符
    print(new_name)
    new_name = name.count('t')#查找指定字符串在字符串中出现的次数
    new_name.capitalize() #将字符串首字母大写
    name.center(50,'*') # 在字符串左右各加50个*
    index = name.find('d') #查找某个字符串,返回它的下标,未找到,返回-1
    index = name.index('d') #查找某个字符串,返回它的下标,未找到,报错
    name.upper()#把所有字母转化为大写
    name.lower()#把所有字母转化为小写
    file_name = 'a.xlsx'
    print(file_name.endswith('.xlsx')) #判断一个字符串以***结尾的
    sql = 'select,update,delete,insert,drop,create,'
    print(sql.startswith('select'))
    #格式化
    f = '{name} 欢迎光临'
    f.format(name = 'qieqie')
    f1 = '{name}  欢迎 {age}'
    d = {'name':'qieqie','age':19}
    f1.format_map(d) #字符串格式化,传进去的是1个字典
    #字符串替换
    sql1 = 'select * from aa'
    new_sql = sql1.replace('select','update')
    print(new_sql)
    print('aaa'.islower())#判断字符串是否全是小写字母
    print('BBB'.isupper())#判断字符串是否全是大写字母
    print('aB'.islower())
    print('12'.isdigit()) #判断是否是数字
    print('abc1'.isalpha()) #判断是否是英文字母
    print('ab1'.isalnum())#判断字符串是否包括数字或字母
    
    str = 'a,b,c,d,e,f'
    str1 = 'a b c'
    #print(list(str))
    #字符串分割方法split()
    print(str.split(',')) #返回1个list
    print(str1.split()) #默认按空格分隔,多个空格同理
    #字符串拼接方法join()
    slit = ['a','b','c']
    s1 = 'abcd'
    s2 = ('1','2','3')
    s3 = {'1':'1','2':'2','3':'3'}
    #可迭代对象即:可循环对象
    res = '*'.join(slit) #被拼接的对象中的元素必须是可迭代对象:可以是字符串,也可以是list,list中必须是字符串;也可以是字典(字典的key value必须是字符串)
    res1 = '*'.join(s1)
    res2 = '*'.join(s2)
    res3 = '*'.join(s3)
    print(res,res1,res2)
    4.  文件操作
    #Python3中没有file,只有open()
    #文件打卡的3种方式:
    #读:如果文件打开时未指定打开方式,默认为读
      #读写模式:r+ :只要有r,文件不存在时会报错,所以要保证文件的存在
    #写:w模式会清空原有文件内容,若文件不存在,新建文件
      #写读模式:w+:
    #追加  a  :若文件存在,则会追加到文件的末尾;若文件不存在,则新建文件。该模式不能使用read()
      #追加读写:a+:以读写模式打开,追加在文件末尾,可以用read()
    f = open('C:\Users\Administrator\Desktop\测试.txt','a+')
    f.seek(0) #将文件指针移至文件头;移动指针时,只对read好使,对写不好使。
    # f.read() 返回的是字符串
    # f.readline 读取一行的内容,返回的是字符串
    print(f.read())  
    f.write('nihaoma')
    print(f.read())
    f.seek(0)
    print(f.read()) #打印出的无
    
    print(f.readline())
    print(f.readlines()) # 读取文件中所有的内容,把文件中每一行的内容存在1个list中,每个元素后有
    
    # f.truncate()  # 清空文件内容
    print(f.read())
    print(f.tell()) # 查看文件指针当前的位置
    names = ['a','b','c','d']
    f.writelines(names) #参数是可迭代对象,list 字符串 字典
    f.write(names) #运行会报错,参数必须是字符串
    f = open('a.txt','w',encoding='utf-8')
    names = ['a','b','c']
    # s='dingfei,123456'
    # f.write(s)
    f.writelines(s)
    # for name in names:
    # f.write(name)
    for name in names:
      f.writelines(names)
    #f.close() #高效处理文件的方法 fw = open('C:\Users\Administrator\Desktop\测试.txt') for f in fw: #直接循环文件对象,就是循环文件中的每一行 print(f) #f此时为str类型,如果想去掉空格或换行符,或略过空行,用f.strip() ff=f.split(',') print(ff) #不要把打开文件放在循环中
  • 相关阅读:
    引用数据类型:字符串和数组
    java流程控制
    java基本类型-八大基本数据类型(4类8种)
    Java标识符
    Java注释
    虚拟环境管理virtualenv
    pipenv管理模块和包
    有关线程的说法?
    TCP三次握手的序列号和确认号的计算
    jenkins的安装
  • 原文地址:https://www.cnblogs.com/qiezizi/p/8116835.html
Copyright © 2020-2023  润新知