社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
介绍一下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中赋值就是对象的引用。不会开辟新的空间,只是复制了对象的引用。
包括两种形式:
分为了两种情况:
2. 浅拷贝
浅拷贝会创建新对象(两个对象的id不同),但是其内容是原对象的引用。
一般情况下,一方改变不会影响另一方,但是如果存在对嵌套对象改变,则双方会互相影响。
三种方式
3. 深拷贝
方式:copy.deepcopy()
和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。因而,它的时间和空间开销要高。
两个对象完全独立,互不影响。
另外注意:
1、对于非容器类型,如数字,字符,以及其它“原子”类型,没有拷贝一说。产生的都是原对象的引用。
2、如果元组变量值包含原子类型对象,即使采用了深拷贝,也只能得到浅拷贝。
**3. Python的特点
1. 动态语言。
2. 解释型语言
3. 支持面向对象编程和面向过程的编程。
Python具有非常强大但是过于简洁的执行面向对象编程的方式,特别是相对于C++或者Java这种大型语言来说
4. 高层语言。
5. 速度快
Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快
6. 使用强制缩进来规范代码,使得程序有极佳的可读性。
7. 可移植性。基于其开源代码的特性,Python已被移植到很多平台。
8.可扩展性。
如果需要一段运行很快的代码,或者是不愿开放的代码,可以使用C/C++编写,再再Python中调用
9. 扩展库强大。特别是在数据处理方面
4 单下划线、双下划线
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只是为了方便并没有强制使用它们
8__new__ 和 __init__
9os库和sys库的区别
1. os模块:——提供了一系列对操作系统进行操作的接口
2 sys:来处理Python运行时配置以及资源,从而可以与当前程序之外的系统环境交互
3. Shutil模块:高级的文件、文件夹、压缩包处理模块
10 read,readline和readlines
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 来判断的。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!