zoukankan      html  css  js  c++  java
  • python面试题(四)

    一、数据类型

    1、字典

    1.1 现有字典 dict={‘a’:24,‘g’:52,‘i’:12,‘k’:33}请按字典中的 value 值进行排序?

    sorted(dict.items(),key=lambda x:x[1])

    1.2说一下字典和json的区别?

    字典是一种数据结构,json是一种数据的表现形式,字典的key值只要能hash就行,json的则必须是字符串

    1.3什么是可变类型,什么是不可变类型?

    可变不可变是指内存中的值是否可以被改变,不可变是指对象内存块中的值是不可以被改变的,不可变类型有数值、字符串、元组。可变类型则是可以改变的,可变类型有列表和字典。

    1.4存入字典里的数据有没有先后顺序?

    存入字典中的数据不会自动排序,可以使用sort函数对字典进行排序。

    1.5字典推导式?

    dict={k:v  for (k,v) in iterable}

    2、字符串

    2.1请反转字符串“sStr”

    print("sStr"[::-1])

    方法千万种,其他的清自行脑补或搜索

    2.2 将字符串”k:1|k1:2|k2:3|k3:4”,处理成Python字典:{k:1, k1:2, … } # 字 典里的K作为字符串处理

    str1 = "k:1|k1:2|k2:3|k3:4"
    def srt2dict(str1):
        dict={}
        for items in str1.split("|"):
            k,v=items.split(":")
            dict[k]=v
        return dict
    print(srt2dict(str1))

    2.3 请按alist中元素的age由大到小排序

    alist=[{'name':'a','age':10},{'name':'b','age':20},{'name':'c','age':30}]
    alist=[{'name':'a','age':10},{'name':'b','age':20},{'name':'c','age':30}]
    def sort_by_age(alist):
        return sorted(alist,key=lambda x:x["age"],reverse=True)
    print(sort_by_age(alist))

    3、列表

    3.1 下面代码的输出结果将是什么?

    list = ['a','b','c','d','e']
    print(list[10:])

    输出是一个空列表

    1. 上面的代码将输出[],不会产生IndexError错误。就像所期望的那样,尝试用超出成员的个数的index
    2. 来获取某个列表的成员。
    3. 例如,尝试获取list[10]和之后的成员,会导致IndexError。

    3.2 写一个列表生成式,产生一个公差为11的等差数列

    print([x*11 for x in range(10)])

    3.3 给定两个列表,怎么找出他们相同的元素和不同的元素?

    list1 = [1,2,3]
    list2 = [3,4,5]
    list1 = [1,2,3]
    list2 = [3,4,5]
    set1 = set(list1)
    set2 = set(list2)
    print(set1&set2)
    print(set1^set2)

    3.4 请写出一段Python代码实现删除一个list里面的重复元素?

    l1 = ['b','c','d','b','c','a','a']

    比较容易记忆的是用内置的set:

    l1 = ['b','c','d','b','c','a','a']
    print(list(set(l1)))

    如果想要保持他们原来的排序:
    用list类的sort方法:

    l1 = ['b','c','d','b','c','a','a']
    # print(list(set(l1)))
    l2 = list(set(l1))
    l2.sort(key=l1.index)
    print(l2)

    也可以这样写:

    l1 = ['b','c','d','b','c','a','a']
    l2 = sorted(set(l1),key=l1.index)
    print(l2)

    也可以使用遍历:

    l1 = ['b','c','d','b','c','a','a']
    l2 = []
    for i in l1:
        if not i in l2:
            l2.append(i)
    print(l2)

    3.5 给定两个list A ,B,请用找出 A ,B中相同的元素,A ,B中不同的元素

    1. A、B 中相同元素:print(set(A)&set(B))
    2. A、B 中不同元素:print(set(A)^set(B))

    3.6 有如下数组list = range(10)我想取以下几个数组,应该如何切片?

    1. [1,2,3,4,5,6,7,8,9]
    2. [1,2,3,4,5,6]
    3. [3,4,5,6]
    4. [9]
    5. [1,3,5,7,9]
    6. 答: 1. [1:] 2. [1:7] 3. [3:7] 4. [-1] 5. [1::2]

    3.7 下面这段代码的输出结果是什么?请解释?

    def extendlist(val, list=[]):
        list.append(val)
        return list
    list1 = extendlist(10)
    list2 = extendlist(123, [])
    list3 = extendlist('a')
    print("list1 = %s" %list1)
    print("list2 = %s" %list2)
    print("list3 = %s" %list3)
    # 输出结果:
    # list1 = [10, 'a']
    # list2 = [123]
    # list3 = [10, 'a']

    新的默认列表只在函数被定义的那一刻创建一次。当extendList被没有指定特定参数list调用时,这组list的值
    随后将被使用。这是因为带有默认参数的表达式在函数被定义的时候被计算,不是在调用的时候被计算。

    3.8 将以下3 个函数按照执行效率高低排序

    1. def f1(lIn):
    2. l1 = sorted(lIn)
    3. l2 = [i for i in l1 if i<0.5]
    4. return [i*i for i in l2]
    5. def f2(lIn):
    6. l1 = [i for i in l1 if i<0.5]
    7. l2 = sorted(l1)
    8. return [i*i for i in l2]
    9. def f3(lIn):
    10. l1 = [i*i for i in lIn]
    11. l2 = sorted(l1)
    12. return [i for i in l1 if i<(0.5*0.5)]

    按执行效率从高到低排列:f2、f1和f3。
    要证明这个答案是正确的,你应该知道如何分析自己代码的性能。
    Python中有一个很好的程序分析包,可以满足这个需求。

    1. import random
    2. import cProfile
    3. lIn = [random.random() for i in range(100000)]
    4. cProfile.run('f1(lIn)')
    5. cProfile.run('f2(lIn)')
    6. cProfile.run('f3(lIn)')

    3.9 获取1~100被7整除的偶数?

    def A():
        L=[]
        for i in range(1,100):
            if i%7==0:
                L.append(i)
        return L
    print(A())

    4、元组

    1. tuple:元组,元组将多样的对象集合到一起,不能修改,通过索引进行查找,使用括号”()”;
    2. 应用场景:把一些数据当做一个整体去使用,不能修改;

    5、集合

    1. set:set集合,在Python中的书写方式为{},集合与之前列表、元组类似,可以存储多个数据,但
    2. 是这些数据是不重复的。集合对象还支持union(联合), intersection(交), difference(差)和
    3. sysmmetric_difference(对称差集)等数学运算.

    快速去除列表中的重复元素

    1. In [4]: a = [11,22,33,33,44,22,55]
    2. In [5]: set(a)
    3. Out[5]: {11, 22, 33, 44, 55}

    交集:共有的部分

    a = {71,72,73,74,75}
    b = {72,74,75,76,77}
    a&b
    #{72, 74, 75}

    并集:总共的部分

    a = {21,22,23,24,25}
    b = {22,24,25,26,27}
    a | b
    #{21, 22, 23, 24, 25, 26, 27}

    差集:另一个集合中没有的部分

    a = {51,52,53,54,55}
    b = {52,54,55,56,57}
    b - a
    #{66, 77}

    对称差集(在a或b中,但不会同时出现在二者中)

    a = {91,92,93,94,95}
    b = {92,94,95,96,97}
    a ^ b
    #{11, 33, 66, 77}

    持续无限期更新中。。。。。。。。。。。

  • 相关阅读:
    Pycharm中导入Python包的方法
    关于SOA架构设计的案例分析
    浅谈12306核心模型设计思路和架构设计
    美图数据统计分析平台架构演进
    有赞搜索系统的架构演进
    美团云的网络架构演进之路
    数据蜂巢架构演进之路
    1号店电商峰值与流式计算
    京东B2B业务架构演变
    饿了么:业务井喷时订单系统架构的演进
  • 原文地址:https://www.cnblogs.com/sui776265233/p/9932789.html
Copyright © 2011-2022 走看看