Python面試題解答——第二部分企業面試題

企業面試題

企業面試題

15.python新式類和經典類的區別?

a. 在python裏凡是繼承了object的類,都是新式類

b. Python3裏只有新式類

c. Python2裏面繼承object的是新式類,沒有寫父類的是經典類

d. 經典類目前在Python裏基本沒有應用

e. 保持class與type的統一對新式類的實例執行a.__class__與type(a)的結果是一致的,對於舊式類來說就不一樣了。

f.對於多重繼承的屬性搜索順序不一樣新式類是採用廣度優先搜索,舊式類採用深度優先搜索。

16.python中內置的數據結構有幾種?

a. 整型 int、 長整型 long、浮點型 float、 複數 complex

b. 字符串 str、 列表 list、 元祖 tuple

c. 字典 dict 、 集合 set

d. Python3 中沒有 long,只有無限精度的 int

 18.反轉一個整數,例如-123 --> -321

class Solution(object):
    def reverse(self,x):
        if -10<x<10:
            return x
        str_x = str(x)
        if str_x[0] !="-":
            str_x = str_x[::-1]
            x = int(str_x)
        else:
            str_x = str_x[1:][::-1]
            x = int(str_x)
            x = -x
        return x if -2147483648<x<2147483647 else 0
if __name__ == '__main__':
    s = Solution()
    reverse_int = s.reverse(-120)
    print(reverse_int)

 19.設計實現遍歷目錄與子目錄,抓取.pyc文件

import os

def get_files(dir,suffix):
    res = []
    for root,dirs,files in os.walk(dir):
        for filename in files:
            name,suf = os.path.splitext(filename)
            if suf == suffix:
                res.append(os.path.join(root,filename))

    print(res)

get_files("./",'.pyc')

 20.一行代碼實現1-100之和

count = sum(range(0,101)) print(count)

 21.Python-遍歷列表時刪除元素的正確做法

遍歷在新在列表操作,刪除時在原來的列表操作

a = [1,2,3,4,5,6,7,8]
print(id(a))
print(id(a[:]))
for i in a[:]:
    if i>5:
        pass
    else:
        a.remove(i)
    print(a)
print('-----------')
print(id(a))

23.可變類型和不可變類型

1,可變類型有list,dict.不可變類型有string,number,tuple.

2,當進行修改操作時,可變類型傳遞的是內存中的地址,也就是說,直接修改內存中的值,並沒有開闢新的內存。

3,不可變類型被改變時,並沒有改變原內存地址中的值,而是開闢一塊新的內存,將原地址中的值複製過去,對這塊新開闢的內存中的值進行操作。

24.is和==有什麼區別?

is:比較的是兩個對象的id值是否相等,也就是比較倆對象是否爲同一個實例對象。是否指向同一個內存地址

== : 比較的兩個對象的內容/值是否相等,默認會調用對象的eq()方法

25.求出列表所有奇數並構造新列表

a = [1,2,3,4,5,6,7,8,9,10]
res = [ i for i in a if i%2==1]
print(res)

26.用一行python代碼寫出1+2+3+10248

from functools import reduce
#1.使用sum內置求和函數
num = sum([1,2,3,10248])
print(num)
#2.reduce 函數
num1 = reduce(lambda x,y :x+y,[1,2,3,10248])
print(num1)

27.Python中變量的作用域?(變量查找順序) 函數作用域的LEGB順序 1.什麼是LEGB?
L: local 函數內部作用域

E: enclosing 函數內部與內嵌函數之間

G: global 全局作用域

B: build-in 內置作用 python在函數裏面的查找分爲4種,稱之爲LEGB,也正是按照這是順序來查找的

28.字符串 "123" 轉換成 123,不使用內置api,例如 int()

def atoi(s):
    num = 0
    for v in s:
        for j in range(10):
            if v == str(j):
                num = num * 10 + j
    return num

29.Given an array of integers

給定一個整數數組和一個目標值,找出數組中和爲目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例:給定nums = [2,7,11,15],target=9 因爲 nums[0]+nums[1] = 2+7 =9,所以返回[0,1]

class Solution:
    def twoSum(self,nums,target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        d = {}
        size = 0
        while size < len(nums):
            if target-nums[size] in d:
                if d[target-nums[size]] <size:
                    return [d[target-nums[size]],size]
                else:
                    d[nums[size]] = size
                size = size +1
solution = Solution()
list = [2,7,11,15]
target = 9
nums = solution.twoSum(list,target)
print(nums)

30.python代碼實現刪除一個list裏面的重複元素

def distFunc1(a):
    """使用集合去重"""
    a = list(set(a))
    print(a)

def distFunc2(a):
    """將一個列表的數據取出放到另一個列表中,中間作判斷"""
    list = []
    for i in a:
        if i not in list:
            list.append(i)
    #如果需要排序的話用sort
    list.sort()
    print(list)

def distFunc3(a):
    """使用字典"""
    b = {}
    b = b.fromkeys(a)
    c = list(b.keys())
    print(c)

if __name__ == "__main__":
    a = [1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
    distFunc1(a)
    distFunc2(a)
    distFunc3(a)

31.統計一個文本中單詞頻次最高的10個單詞?

import re

# 方法一
def test(filepath):
    
    distone = {}

    with open(filepath) as f:
        for line in f:
            line = re.sub("\W+", " ", line)
            lineone = line.split()
            for keyone in lineone:
                if not distone.get(keyone):
                    distone[keyone] = 1
                else:
                    distone[keyone] += 1
    num_ten = sorted(distone.items(), key=lambda x:x[1], reverse=True)[:10]
    num_ten =[x[0] for x in num_ten]
    return num_ten
    
 
# 方法二 
# 使用 built-in 的 Counter 裏面的 most_common
import re
from collections import Counter


def test2(filepath):
    with open(filepath) as f:
        return list(map(lambda c: c[0], Counter(re.sub("\W+", " ", f.read()).split()).most_common(10)))

32.請寫出一個函數滿足以下條件

該函數的輸入是一個僅包含數字的list,輸出一個新的list,其中每一個元素要滿足以下條件: 1、該元素是偶數 2、該元素在原list中是在偶數的位置(index是偶數)

def num_list(num):
    return [i for i in num if i %2 ==0 and num.index(i)%2==0]

num = [0,1,2,3,4,5,6,7,8,9,10]
result = num_list(num)
print(result)

 36.兩個有序列表,l1,l2,對這兩個列表進行合併不可使用extend

def loop_merge_sort(l1,l2):
    tmp = []
    while len(l1)>0 and len(l2)>0:
        if l1[0] <l2[0]:
            tmp.append(l1[0])
            del l1[0]
        else:
            tmp.append(l2[0])
            del l2[0]
    while len(l1)>0:
        tmp.append(l1[0])
        del l1[0]
    while len(l2)>0:
        tmp.append(l2[0])
        del l2[0]
    return tmp

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章