Python相关面试题总结(一)

1.如何实现对python列表去重并保持原先顺序?

l1 = [1, 4, 3, 3, 4, 2, 3, 4, 5, 6, 1]
a = list(set(l1))
a.sort(key=l1.index)
print(a)
#  a.sort(key=l1.index) 执行返回值为None,不要直接list(set(l1)).sort(key=l1.index)

2.现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

t1 = (('a'),('b'))
t2 = (('c'),('d'))
print(list(zip(t1,t2))
print(list(map(lambda t:{t[0],t[1]},zip(t1,t2))))

data = (('a'), ('b'), ('c'), ('d'))
print(data[0:2])  # (a,b)  ==  (('a'),('b'))
print(data[2:4])  # (c,d)
v = list(map(lambda x, y: {x: y}, data[0:2], data[2:4]))
print(v)  # [{'a': 'c'}, {'b': 'd'}]
# 主要了解map 匿名函数两个参数计算
f = lambda x, y: {x: y}
v1 = list(map(f, ('a', 'b'), ('c', 'd')))  # [{'a': 'c'}, {'b': 'd'}]

print(v1)
print(('a'))
print(type('a'))  # 注意括号直接加字符串和数字,不加逗号相当于啥都没加

3.请给出二分查找的python示例代码。
迭代

l = [2, 3, 5, 10, 15, 16, 18, 22, 26]


def find2(l, ans, start=0, end=None):
    if not end:
        end = len(l) - 1
    mid = (start + end) // 2
    if start <= end:
        if ans > l[mid]:
            start = mid + 1
            return find2(l, ans, start, end)
        elif ans < l[mid]:
            end = mid - 1
            return find2(l, ans, start, end)
        else:
            return mid
    else:
        return '找不到'

print(find2(l, 5))

非迭代


def binary_search(l, val):
    start = 0
    end = len(l) - 1
    while start <= end:
        mid = (start + end) // 2
        if l[mid] < val:
            start = mid + 1
        elif l[mid] > val:
            end = mid - 1
        else:
            return mid
    else:
        return '找不到'

4.在python字符串格式化中,% 和 .format的主要区别是什么?
python 内置的占位符%,字符串中有多少占位符就有,就需要多少变量来填充
.format是字符串的内置方法字符串中可以通过{},{0},{name}来填充数值,具体数据是有format函数的参数来确定

  1. *args**kwargs在什么情况下会使用到?请给出使用kwargs的示例代码
    当你不确定你的函数里将要传递多少参数时你可以用
    args
    相似的,
    *kwargs允许你使用没有事先定义的参数名:
常见使用情况是装饰器或者以下情况
class Foo(object):
    def __init__(self, value1, value2):
        # do something with the values
        print value1, value2

class MyFoo(Foo):
    def __init__(self, *args, **kwargs):
        # do something else, don't care about the args
        print 'myfoo'
        super(MyFoo, self).__init__(*args, **kwargs)

还有如下方法,如果下面的`__new__`方法没有写入(*args,**kwargs)
则执行实例化时候回报错

class Bar(object):
    """
    有参数__init__类
    """

    def __init__(self, name):
        self.name = name

    def __new__(cls, *args, **kwargs):
        obj = object.__new__(cls)
        print(obj)
        return obj
b = Bar('hello')

6.选择题

x = "foo"
y = 2
print(x*y)
执行结果:  foofoo

7.问答题

kvps = {'1':1,'2':2}
theCopy = kvps
kvps['1'] = 5
sum = kvps['1'] + theCopy['1']
print(sum)
10
  1. 选择题 c
sys.path.append('/root/mods')    
A.改变python的启动路径
B.改变python目前的工作路径
C.添加一个新的python模块的搜素路径
D.从mods中移除所有文件夹
print(sys.path)
[
'', 
'/Users/BUYI/anaconda3/lib/python36.zip', 
'/Users/BUYI/anaconda3/lib/python3.6', 
'/Users/BUYI/anaconda3/lib/python3.6/lib-dynload', 
'/Users/BUYI/anaconda3/lib/python3.6/site-packages', 
'/Users/BUYI/anaconda3/lib/python3.6/site-packages/aeosa'
]
  1. 选择题
country_counter = {}
def addone(country):
    if country in country_counter:
        country_counter[country] += 1
    else:
        country_counter[country] = 1
addone('China')
addone('Japan')
addone('china')
print(len(country_counter)) # 3
{'China': 1, 'Japan': 1, 'china': 1}

10.选择题 (B)
重点关注切片和浅拷贝的区别

names1 = ['Amir','Barry','Chales','Dao']
names2 = names1
names3 = names1[:]
names2[0] = 'Alice'
names3[1] = 'Bob'
sum = 0
for ls in (names1,names2,names3):
    if ls[0] == 'Alice':
        sum += 1
    if ls[1] == 'Bob':
        sum += 10
print(sum)
 A.11  B.12  C.21  D.22   E.33

11.填空题 (24)

d = lambda p : p * 2
t = lambda p : p * 3
x = 2
x = d(x)
x = t(x)
x = d(x)
print(x)

12.填空题(yes)

x = True
y = False
z = False
if x or y and z:
    print('yes')
else:
    print('no')
其一, 在不加括号时候, and优先级大于or
其二, x or y 的值只可能是x或y.  x为真就是x, x为假就是y(切记如果x为真,后面的就不计算了)
第三, x and y 的值只可能是x或y.  x为真就是y, x为假就是x(如果x为假,后面的也不计算了)

13.Python里面如何实现tuple和list的转换
list
tuple()

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

a = [1, 2, 4, 2, 4, 5, 6, 5, 7, 8, 9, 0]
b = {}.fromkeys(a)
print(b)
print(b.keys())
a = list(b.keys())
print(a)

15.如何得到列表list的交集与差集

a = [2, 5, 8]
b = [3, 4, 5]
print(set(a) & set(b))  # {5}
print(set(a).intersection(set(b)))  # {5}

print(set(a) | set(b))  # {2, 3, 4, 5, 8}
print(set(a).union(set(b)))  # {2, 3, 4, 5, 8}

print(set(a) - set(b))  # {8, 2}
print(set(a).difference(set(b)))  # {8, 2}

print(set(a) ^ set(b))  # {2, 3, 4, 8}
print(set(a).symmetric_difference(set(b)))  # {2, 3, 4, 8}
集合操作

16.以下的代码的输出将是什么:(自己手写一下)

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']
  1. python中定义函数是如何书写可变参数和关键字参数?
    *args**kwargs

18.什么是lambda表达式?
编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数,因此也不用担心函数名冲突。
匿名函数主要是指对某数据的一个处理过程,但是不需要一个变量去承载他.
推荐知乎
19.re.match 和search 有什么区别
*re.match(pattern, string[, flags]) *

从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。
ret = re.match('a', 'abc').group()  # 同search,不过尽在字符串开始处进行匹配
print(ret)  #结果 : 'a'

re.search(pattern, string[, flags])

若string中包含pattern子串,则返回Match对象,否则返回None,
注意,如果string中存在多个pattern子串,只返回第一个。
ret = re.search('a', 'eva egon yuan').group()
print(ret) #结果 : 'a'
 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

re.findall(pattern, string[, flags])

返回string中所有与pattern相匹配的全部字串,返回形式为数组
ret = re.findall('a', 'eva egon yuan')  # 返回所有满足匹配条件的结果,放在列表里
print(ret) #结果 : ['a', 'a']

re.finditer(pattern, string[, flags])

返回string中所有与pattern相匹配的全部字串,返回形式为迭代器。
import re
ret = re.finditer('\d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器
print(ret)  # <callable_iterator object at 0x10195f940>
print(next(ret).group())  #查看第一个结果
print(next(ret).group())  #查看第二个结果
print([i.group() for i in ret])  #查看剩余的左右结果
  1. 1 or 2 和 1 and 2输出分别是什么?为什么?
1 or 2 ---->1 # 1为True,or运算符直接结束运算,返回1
1 and 2 ---->2  # 1 为True,and运算符需要继续运算,返回值为and后的值(2)

and or 详见

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容

  • 两本不错的书: 《Python参考手册》:对Python各个标准模块,特性介绍的比较详细。 《Python核心编程...
    静熙老师哈哈哈阅读 3,359评论 0 80
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,558评论 1 118
  • 套接字编程:1、 函数的功能基本和c类似,唯一不同的地方在于当发生错误时,它不是通过返回值来告知的,而是通过触发异...
    静熙老师哈哈哈阅读 659评论 0 11
  • 风烛尘香花已殆,日夜戏蓬头。 物是人非事宜休,欲语拭泪流。 衣染红樟浓似酒,珠扣两排袖。 千门锁尽相思瘦,两恨两清...
    东方轩洛阅读 333评论 0 5
  • 社群是肆拾玖坊发展的根基,也是肆拾玖坊纵横江湖的独门秘籍。玉泉分舵开宗立派刚一个月,户外潮牛是我们玉泉分舵正在筹备...
    罗大奋阅读 459评论 0 0