随着Python在企业中的应用越来越多,岗位需求越来越大,面试成为了搞定优质职位的快速方式,下面是笔者面试10余家企业总结的面试题,希望对Python从业者有帮助。

介绍一下Python的数据结构,并说明它们有什么操作

四个基本数据结构:list、tuple、dict、set

在python中,字符串 tuples, 和数字是不可更改的对象,而list,dict等则是可以修改的对象。

迷糊桃:2小时知乎疯传的2.6W次?最终被所有大V封杀的Python教程《附Python电子书、开发文档》​zhuanlan.zhihu.com

1. list

1). list的操作有哪些?

可以用可以使用dir()和help()查询

2. tuple

1)list和tuple的区别——滴滴

list tuple
创建 list = [1, 2, 3, 4, 5] t1 =(1,) # 如果只有一个元素,必须用“,”隔开,否则默认为‘int’类型t2 = (1, 2, 3)t3 = (1, 2, 3, ['a', 'b']) # tuple中可以嵌套list
元素是否可更改(最大的不同) 可更改:list.append()list.extend()list.pop()list.remove() 不可更改,所以不具备增、删、改。如果删除:del t #删除整个元素对于t3,tuple中嵌套有list,则可以更改那个list的值:t3[3].append('c') #t3 = (1, 2, 3, ['a', 'b', 'c'])
切片操作 相当于浅拷贝(新的list、tuple)正向、负向
是否有序 有序(按定义的次序进行排序)
优势 1. tuple操作比list更快。2. 访问的安全性。数据不可更改2. 隐含的assert语句,说明这一数据是常量
转换 1. tuple(l)2. list(t)

3. dict:

1)dict有哪些操作?

另外:dict推导式:

d = {key: value for (key, value) in iterable}

2)dict是有序的吗?

——不是,list、tuple是有序的

3)如果a = dictR, b=a, dictR修改了,a、b会变化吗?这属于引用吗?这是浅拷贝还是深拷贝?

这是赋值引用。如果更改a的值,b会随之变化。如果更改b的值,a会随之变化。

如果改成了list:同样。

如果改成了tuple,或者一个非容器类型(例如:数字、字符以及其他原子类型),没有拷贝一说,只能是引用,a、b发生变化都不会影响彼此的值。但是如果tuple中含有嵌套的list,改变这个list中的值,会互相影响。

4. set

**2. Python中赋值引用、浅拷贝与深拷贝

Python中关于对象复制有三种类型的使用方式,赋值、浅拷贝与深拷贝。

1. 赋值(函数的参数/返回值)——对象引用

在Python中赋值就是对象的引用。不会开辟新的空间,只是复制了对象的引用。

包括两种形式:

  1. = a

分为了两种情况

  • :tuple、数字、字符等原子类型——a、b的改变互不影响(相当于指向了另一个对象的内存空间)
  • :list、dict、set——a、b改变都会互相影响(相当于内存中的对象改变)

2. 浅拷贝

浅拷贝会创建新对象(两个对象的id不同),但是其内容是原对象的引用。

一般情况下,一方改变不会影响另一方,但是如果存在对嵌套对象改变,则双方会互相影响。

三种方式

  • :l2 = l1[:]
  • :l2 = list(l1)
  1. :l2 = copy.copy(l1)

3. 深拷贝

方式:copy.deepcopy()

和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。因而,它的时间和空间开销要高。

两个对象完全独立,互不影响。

另外注意:

1、对于非容器类型,如数字,字符,以及其它“原子”类型,没有拷贝一说。产生的都是原对象的引用。

2、如果元组变量值包含原子类型对象,即使采用了深拷贝,也只能得到浅拷贝。

**3. Python的特点

1. 动态语言。

  • :也就是可以不用事先声明变量,就可以对它赋值。在编译的时候,Python不会进行类型检查,而是直至运行时,自动判断变量类型并对变量赋值,所以可能抛出类型错误。
  • :变量在赋值前必须声明数据类型。这样的好处是在编译器就可以发现类型错误。例如:C++/C、Java

2. 解释型语言

  • ,例如C++,源文件需要通过编译器使用一系列标志和选项转换成计算机可以识别的二进制格式;在运行程序时,链接器/载入器软件将程序从硬盘复制到内存,然后开始运行。
  • 解释型语言,例如Python,在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。

3. 支持面向对象编程和面向过程的编程。

  • 围绕着数据和功能
  • 程序围绕着过程或者函数(可重复使用的程序片段)构建

Python具有非常强大但是过于简洁的执行面向对象编程的方式,特别是相对于C++或者Java这种大型语言来说

4. 高层语言

  1. 无需考虑如何管理你的程序使用内存一类的底层细节。

5. 速度快

Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快

6. 使用强制缩进来规范代码,使得程序有极佳的可读性。

7. 可移植性。基于其开源代码的特性,Python已被移植到很多平台。

8.可扩展性。

如果需要一段运行很快的代码,或者是不愿开放的代码,可以使用C/C++编写,再再Python中调用

9. 扩展库强大。特别是在数据处理方面

4 单下划线、双下划线

  1. :一种约定,Python内部的名字,用来与用户自定义的名字区分开,防止冲突
  2. :一种约定,用来指定变量私有
  • import *情况下,解释器会对单下划线开头的名称做处理
  • from module/package import *,任何单下划线开头的名称不会被导入,除非模块/包的__all__列表明确包含了这些名称
  • _classname__name来代替这个名字用以区别和其他类相同的命名
  • A的子类B,B就不会轻易的覆盖掉A中的__method_name了,相当于:Java中的final

5. Python中的pass语句作用是什么?

pass语句不会执行任何操作,一般作为占位符或者创建占位程序

6. Python如何进行类型转换?

Python提供了将变量或值从一个类型转换成另一个类型的内置方法。

1. 数值类:int(x [,base]), long(x [,base]), float(x), complex(real [, image])

2. 字符串:str(x)、chr(x)

3. 其他:list(s), tuple(s)

7 args 和**kwargs

用*args和**kwargs只是为了方便并没有强制使用它们

  1. :可变的位置参数:不确定函数里传递参数的个数(可传递任意数量)
  2. :可变的关键字参数:允许你使用没有事先定义的参数名

8__new__ 和 __init__

  1. 静态方法,而__init__是一个实例方法.
  2. 返回一个创建的实例,而__init__什么都不返回.
  • __new__返回一个cls的实例时后面的__init__才能被调用.
  • __new__,初始化一个实例时用__init__.

9os库和sys库的区别

1. os模块:——提供了一系列对操作系统进行操作的接口

2 sys:来处理Python运行时配置以及资源,从而可以与当前程序之外的系统环境交互

3. Shutil模块:高级的文件、文件夹、压缩包处理模块

10 read,readline和readlines

  1. 读取整个文件
  2. 读取下一行,使用生成器方法
  3. 读取整个文件到一个迭代器以供我们遍历

11 Python中的九九乘法表(for循环)

  1. for i in range(1,10):
  2. for j in range(1,i+1):
  3. d = i * j
  4. print('%d*%d=%-2d'%(i,j,d),end = ' ' )
  5. print()

12 字符串反序输出?

print(a_str[::-1])

13 range 和 xrange 的区别?

两者用法相同,不同的是 range 返回的结果是一个列表,而 xrange 的结果是一个生成器,前者是直接开辟

一块内存空间来保存列表,后者是边循环边使用,只有使用时才会开辟内存空间,所以当列表

很长时,使用 xrange 性能要比 range 好。

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

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

15. 什么是可变、不可变类型?

可变不可变指的是内存中的值是否可以被改变,不可变类型指的是对象所在内存块里面的值不可以

改变,有数值、字符串、元组;可变类型则是可以改变,主要有列表、字典。

16. 存入字典里的数据有没有先后排序?

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

17. 字典推导式?

d = {key: value for (key, value) in iterable}

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

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

19 怎么快速的对列表进行去重

ids = [1,4,3,3,4,2,3,4,5,6,1] ids = list(set(ids))

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

A、B 中相同元素:print(set(A)&set(B))

A、B 中不同元素:print(set(A)^set(B))

21 Python 中 is 和==的区别?

is 判断的是 a 对象是否就是 b 对象,是通过 id 来判断的。

==判断的是 a 对象的值是否和 b 对象的值相等,是通过 value 来判断的。

欢迎大家学习交流,谢谢。

python 覆盖list_这套python 面试题你还没有?保证让你面试通关《附Python源码+实战项目》...相关推荐

  1. python:根据头数和脚数,求多少只兔子和多少只鸡(附完整源码)

    python:根据头数和脚数,求多少只兔子和多少只鸡 def solve(num_heads, num_legs):ns = "No solutions!"for i in ran ...

  2. 实战|Python轻松实现动态网页爬虫(附详细源码)

    用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识. 项目背景 事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码) ...

  3. beautifulsoup解析动态页面div未展开_实战|Python轻松实现动态网页爬虫(附详细源码)...

    用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识.项目背景事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码)&g ...

  4. Python编程:实现词云生成(附详细源码)

    Python编程:实现词云生成(附详细源码) 词云是一种数据可视化的方式,它可以用来展示某个主题下的主要关键词汇.在Python中,我们可以使用 wordcloud 库来实现词云的生成.本文将带您一步 ...

  5. Python实现恩尼格玛加密算法——附完整源码

    Python实现恩尼格玛加密算法--附完整源码 恩尼格玛是第二次世界大战中德国所使用的复杂电机械式密码机.它被认为是世界上最复杂的加密设备之一.在这个项目中,我们将使用Python模拟实现恩尼格玛加密 ...

  6. 基于 Python 的图书借阅管理系统(附报告源码)

    文章目录 项目需求 系统建模 活动图 用例图 类图 顺序图 状态图 系统部署说明 Requirements 启动系统 展示后修改和优化说明 源码下载 项目需求 系统建模 活动图 普通用户注册后通过前台 ...

  7. Python语言打造智能语音助手——附完整源码

    Python语言打造智能语音助手--附完整源码 随着智能家居.智能办公等领域的逐渐兴起,实现语音控制与交互已成为了一种趋势.而Python语言是一门极具魅力的编程语言,其强大的库.简洁的语法以及易于学 ...

  8. 使用Python获取数字货币价格(附完整源码)

    使用Python获取数字货币价格(附完整源码) 如果你想要及时了解到加密货币的价格变化,你可以使用Python获取数字货币的实时价格.本文将介绍如何使用Python和CoinGecko API获取数字 ...

  9. 【python自动化测试】京东|淘宝|秒杀12306抢票程序揭秘!一起薅羊毛吧【含源码】

    相信老铁们应该也看过很多这样的视频或者帖子:python自动秒杀的程序,京东,淘宝,大麦网抢票,秒杀抢购抢茅台,12306抢票,还有python薅羊毛的,感觉好像需求挺大的,很多人感兴趣.我也看了一些 ...

最新文章

  1. MVC验证10-到底用哪种方式实现客户端服务端双重异步验证
  2. Swift - 委托(delegate)的介绍,及使用样例
  3. AI公开课:19.04.03周明—MSRA副院长《NLP的进步如何改变搜索的体验》课堂笔记以及个人感悟
  4. BZOJ-1192-鬼谷子的钱袋
  5. 无限级分类及生成json数据
  6. 分析java程序的命令总结jps,jstack
  7. 信度和效度经典例子_浅析经典目标检测评价指标--mmAP(一)
  8. 项目疑难杂症记录(四):Activity被重新创建的原因分析
  9. linux clang安装,linux 配置 clang++ SDL 开发环境 (新手向)
  10. 蓝桥杯2018年第九届C/C++省赛B组第二题-明码
  11. 1056 组合数的和 (15 分)—PAT (Basic Level) Practice (中文)
  12. mac搜索不到wifi wtg_如何设置隐藏wifi 防止蹭网隐藏wifi方法【详解】
  13. android18lazuli,Free 18 Japan for you on AliExpress.
  14. chm文件打开空白或显示不全
  15. 【项目管理】人力资源管理之四:双因素理论和期望理论
  16. Beyond 比对工具
  17. html50页面显示在线人数,50个网页常用小代码
  18. 怎么用u盘重装系统?石大师u盘重装win10系统步骤
  19. 电脑怎么还原系统win11
  20. Libuv的安装及运行使用

热门文章

  1. 脚本文档_创建完美的架构文档脚本
  2. azure云数据库_如何将MySQL表迁移到Microsoft Azure SQL数据库
  3. SQL Server商业智能功能–创建简单的OLAP多维数据集
  4. [NOIp2016]天天爱跑步 线段树合并
  5. Android实习结束后的阶段性总结
  6. linux find 命令详解
  7. 获取指定存储过程的参数定义
  8. MSSQL自增字段默认值
  9. iframe中元素的获取
  10. C# vs note