• python面试,日更


    l1 = [11, 2, 3, 22, 2, 4, 11, 3]
    去重并保持原来顺序
    # 集合方法
    l2 = list(set(l1))
    l2.sort(key=l1.index) # 按照l1索引排序
    print(l2)
    
    # 列表
    l3 = []
    for item in l1:
        if item not in l3:
            l3.append(item)
    print(l3)
    答案
    l4 = [
        {"name":"lmj11","age":11},
        {"name":"lmj44","age":44},
        {"name":"lmj33","age":33},
        {"name":"lmj77","age":77},
        {"name":"lmj66","age":66},
        {"name":"lmj55","age":55},
    ]
    # 使用lambda表达式
    l4.sort(key= lambda x:x["age"]) # 方式一
    l4=sorted(l4,key=lambda x:x["age"]) # 方式二
    print(l4)
    
    # 其他方式
    # def tmp(x):
    #     return x["age"]
    # l4.sort(key=tmp)
    # print(l4)
    答案
    def extend_list(v, li=[]):
        li.append(v)
        return li
    
    list1 = extend_list(10)
    list2 = extend_list(123, [])
    list3 = extend_list('a')
    
    print(list1)
    print(list2)
    print(list3)
    
    print(list1 is list3)

    答案:

    [10,'a']
    [123,]
    [10,'a']
    答案
    问以下代码的输出结果是什么?
    list1 = ["a", "b", "c", "d", "e"]
    print(list1[10:])

    答案:

    # 列表的切片操作
    print(list1[3:]) # ['d', 'e']
    print(list1[-3:]) # ['c', 'd', 'e']
    print(list1[:-3]) # ['a', 'b']
    print(list1[:3]) # ['a', 'b', 'c']
    答案
    list1=["a","b","c","d","e"]
    
    # 实现打乱列表顺序
    # 分别在原有列表和新建列表基础上
    
    #请分别阐述潜复制,深复制和切片复制列表的特点
    import random
    
    random.shuffle(list1)
    print(list1) # ['c', 'a', 'b', 'd', 'e']
    
    # 以下给出该函数的官方解释,即打乱原本表格,返回None
    help(random.shuffle)
    """
    shuffle(x, random=None) method of random.Random instance
        Shuffle list x in place, and return None.
        
        Optional argument random is a 0-argument function returning a
        random float in [0.0, 1.0); if it is the default None, the
        standard random.random will be used.
    """

    • 直接赋值:其实就是对象的引用(别名)。

    • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。(字典或多层列表可明显看出区别)

    • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,开辟了一块新的内存空间,完全拷贝了父对象及其子对象。

    list1=["a","b","c","d","e"]
    
    # 列表潜拷贝
    list2=list1.copy()
    print(list1) # ['a', 'b', 'c', 'd', 'e', 'fff']
    print(list2) # ['a', 'b', 'c', 'd', 'e']
    list1.append("fff")
    print(list1) # ['a', 'b', 'c', 'd', 'e', 'fff']
    print(list2) # ['a', 'b', 'c', 'd', 'e']
    
    print('分割线'.center(50,'=')) # 列表深拷贝 import copy list3 = copy.deepcopy(list1) print(list1) # ['a', 'b', 'c', 'd', 'e', 'fff'] print(list3) # ['a', 'b', 'c', 'd', 'e', 'fff'] list1.append("ggg") print(list1) # ['a', 'b', 'c', 'd', 'e', 'fff', 'ggg'] print(list3) # ['a', 'b', 'c', 'd', 'e', 'fff']
    # 列表换成多层时的潜拷贝
    list2=list1.copy()
    print(list1) # ['a', 'b', 'c', 'd', 'e', 'fff']
    print(list2) # ['a', 'b', 'c', 'd', 'e']
    list1[3].append("fff")
    print(list1) # ['a', 'b', 'c', ['d', 'e', 'fff']]
    print(list2) # ['a', 'b', 'c', ['d', 'e', 'fff']]
    综上所述,可理解对象A浅拷贝B,就是A对B的一种内存地址的引用,无论B引用的值如何改变,A均可以取得最新值
     """
    问:执行完下面的代码后,  l,m的内容分别是什么?
    """


    def func(m):
        for k,v in m.items():
            m[k+2] = v+2


    m = {1: 2, 3: 4}
    l = m  # 浅拷贝
    l[9] = 10
    func(l)
    m[7] = 8


    print("l:", l)
    print("m:", m) 
    # python3.6 中会报错
    # 在迭代一个列表或字典的时候,不能修改列表或字典的大小!
    答案
    # 将list1 拼接成字符串
    list1 = [11,22,33]
    new_list = "".join([str(i) for i in list1])
    print(new_list)
    答案
    Python中字符串的格式化(%s,format),一般用哪种?为什么?
    编写Python脚本,分析xx.log文件,按域名统计访问次数
    
    xx.log文件内容如下:
    https://www.sogo.com/ale.html
    https://www.qq.com/3asd.html
    https://www.sogo.com/teoans.html
    https://www.bilibili.com/2
    https://www.sogo.com/asd_sa.html
    https://y.qq.com/
    https://www.bilibili.com/1
    https://dig.chouti.com/
    https://www.bilibili.com/imd.html
    https://www.bilibili.com/
    
    
    输出:
    4 www.bilibili.com
    3 www.sogo.com
    1 www.qq.com
    1 y.qq.com
    1 dig.chouti.com
    import re
    from collections import Counter
    
    # 1. 读取出内容
    with open('yuming.log','r',encoding='utf-8')as f:
        data = f.read()
    
    # 2. 取域名信息
    res = re.findall(r'https://(.*?)/.*?',data)
    # print(res)
    
    # 3. 统计
    dic = {}
    for i in res:
        if i not in dic:
            dic[i] = 1
        else:
            dic[i] += 1
    
    # 4. 排序(二种方法)
    # print(dic) # {'www.sogo.com': 3, 'www.qq.com': 1, 'www.bilibili.com': 4, 'y.qq.com': 1, 'dig.chouti.com': 1}
    # dic = Counter(res)
    # print(dic) # Counter({'www.bilibili.com': 4, 'www.sogo.com': 3, 'www.qq.com': 1, 'y.qq.com': 1, 'dig.chouti.com': 1})
    # for k in dic.items():
    #     print(k)
    '''
    ('www.sogo.com', 3)
    ('www.qq.com', 1)
    ('www.bilibili.com', 4)
    ('y.qq.com', 1)
    ('dig.chouti.com', 1)
    '''
    
    # 方法一
    # res2 = sorted(dic,key=lambda x:dic[x],reverse=True)
    # print(res2) # ['www.bilibili.com', 'www.sogo.com', 'www.qq.com', 'y.qq.com', 'dig.chouti.com']
    # for k in res2:
    #     print(dic[k],k)
    
    '''
    4 www.bilibili.com
    3 www.sogo.com
    1 www.qq.com
    1 y.qq.com
    1 dig.chouti.com
    
    '''
    
    # 方法二
    # print(dic.items()) # dict_items([('www.sogo.com', 3), ('www.qq.com', 1), ('www.bilibili.com', 4), ('y.qq.com', 1), ('dig.chouti.com', 1)])
    res2 = sorted(dic.items(), key=lambda x:x[1], reverse=True)
    # print(res2) # [('www.bilibili.com', 4), ('www.sogo.com', 3), ('www.qq.com', 1), ('y.qq.com', 1), ('dig.chouti.com', 1)]
    for k,v in res2:
        print(v,k)
    '''
    4 www.bilibili.com
    3 www.sogo.com
    1 www.qq.com
    1 y.qq.com
    1 dig.chouti.com
    
    '''
    答案

    待续。。。

  • 相关阅读:
    Solr 配置中文分词器 IK
    Solr 访问 403 错误
    阿里巴巴在线代码检查工具
    『调错』OGG Error opening module ggjava_ue.dll
    『取巧』VS2015试用期过后 继续试用
    『开源』设置系统 主音量(0~100 静音) VolumeHelper 兼容 Xp Win7 .Net 20 AnyCPU
    『尝试』随手绘制几张点阵图片
    『实用』过滤字符串中的幽灵字符
    『转载』从内存资源中加载C++程序集:CMemLoadDll
    『开源重编译』System.Data.SQLite.dll 自适应 x86 x64 AnyCPU 重编译
  • 原文地址:https://www.cnblogs.com/limengjie0104/p/9098629.html
Copyright © 2020-2023  润新知