zoukankan      html  css  js  c++  java
  • 面试题-Python-002

    1、 给出一个数组,如[7864,284,347,7732,8498],现在需要将数组中的数字拼接起来,如按顺序依次拼接为:786428434777328498,数组中的数字拼接顺序可以任意,编写程序,返回[最大的可能拼出的数字]。(以上面数组为例,返回:8498786477323472284)

    方法一:

    import time
    startT = time.clock()
    
    listA = [7864, 284, 347, 7732, 8498]
    strB = ''
    for i in range(len(listA)):
        for j in range(len(listA)-1):
            if listA[j] < listA[j+1]:
                listA[j], listA[j+1] = listA[j+1], listA[j]
    for i in listA:
        strB = strB + str(i)
    print(strB)
    
    endT = time.clock()
    print('耗时:{}'.format(endT - startT)) 

    解析:1)实现倒序排序。
       2)字符串拼接。

    拓展:除了冒泡排序,试试换个排序方法。

    方法二:

    import time
    startT = time.clock()
    
    listA = [7864, 284, 347, 7732, 8498]
    strB = ''
    while listA != []:
        maxA = listA[0]
        indexA = 0
        for j, a in enumerate(listA):
            if a > maxA:
                maxA = a
                indexA = j
        strB += str(maxA)
        listA.pop(indexA)
    
    print(strB)
    
    endT = time.clock()
    print('耗时:{}'.format(endT - startT))

    解析:1)每次找到数组中,当前最大的数,然后将该数拼接到待输出字符串中,并同时从原数组中移除该数。
       2)重复循环(1),直到原数组被移空。
       3)在获取最大数时,利用了enumerate函数同时获取下标、元素
       4)因为同时完成排序和字符串拼接,方法二比方法一有明显的效率提升。

    2、 有一个文件,文件中每一行为一个 HTTP 请求响应的 log ,每行的 log 格式为:[HTTP URL] [请求响应码,如 200,404] [请求响应时间,以 ms 为单位]
      例如‘http://www.baidu.com 200 345’。求一下所有响应码为 200 的请求的响应时间平均值,单位 ms。

    fpath = '*请改为log文件的绝对路径*'
    irow = 0
    ftime = 0
    i = -1
    with open(fpath, 'r') as f:
        for l in f.readlines():
            if l[:4].lower() != 'http':
                continue
            i = l.find(' 200 ')
            if i > -1:
                irow += 1
                ftime += int(l[i+4:])
    print('状态为200的记录总共 {} 行,总耗时 {} ms,平均耗时 {:.4f} ms。'.format(irow, ftime, ftime / irow))

    解析:1)按行读取记录。
       2)为了避免空行,只考虑http开头的行记录。
       3)因为url中通常不会有空行,而毫秒列后直接是换行符。所以这里取巧直接在 响应码200前后加上分隔字符 作为需要查询的字符串。虽然log文件中,我是用tab键做分隔,但这里查询时用空格也能匹配成功(我的环境上,tab总是被转换成空格,不知道是操作系统的原因,还是编辑器的原因)。但不保证windows系统下这样处理也能成功。
       4)响应码是200时,行计数器加1,时间计数器累加。

    3、L = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3],用一行代码得出 [11, 1, 2 ,3 ,5]。

    L = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3]
    print(list(set(L)))

    解析:1)本题考点是列表去掉重复元素。
       2)set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。又,set是无序的。关于set的详细说明见这里

    4、L = [1, 2, 3, 5, 6],如何得出'12356'?

    L = [1, 2, 3, 5, 6]
    print(''.join(str(i) for i in L))

    解析:1)这题最简单的写法就是用for循环遍历list,然后拼接字符串,但那样的话,需要写多行代码。
         这里通过巧妙利用join函数和生成器,可以用一行代码完成。
       2)join函数的说明见这里;生成器的详细说明见这里

  • 相关阅读:
    谷歌浏览器解决跨域
    vue 解决跨域问题
    nth-of-type & nth-child 的区别
    uniapp 小程序 获取位置信息
    笔记本使用命令创建wifi
    express每次修改后重新启动
    express 一个js文件中写多个路由 然后使用
    小程序分享到朋友圈
    小程序分享给朋友
    小程序客服功能实现
  • 原文地址:https://www.cnblogs.com/yjys/p/10738312.html
Copyright © 2011-2022 走看看