python 面试题 - Go语言中文社区

python 面试题


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

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

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

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.  读取整个文件
  1.  读取下一行,使用生成器方法
  2.  读取整个文件到一个迭代器以供我们遍历

 

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

for i in range(1,10):
    for j in range(1,i+1):
        d = i * j
        print('%d*%d=%-2d'%(i,j,d),end = ' ' )
    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 来判断的。

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/yipianfeng_ye/article/details/102928902
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:37:10
  • 阅读 ( 1200 )
  • 分类:面试题

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢