好文推荐
代码优化加速:https://mp.weixin.qq.com/s/vsMSjkxWpNnHtdFH7BaEAQ
Python 内置的数据结构如str, tuple, list, set, dict底层都是 C 实现的,速度非常快,自己实现新的数据结构想在性能上达到内置的速度几乎是不可能的。
- list类似于 C++ 中的std::vector,是一种动态数组。其会预分配一定内存空间,当预分配的内存空间用完,又继续向其中添加元素时,会申请一块更大的内存空间,然后将原有的所有元素都复制过去,之后销毁之前的内存空间,再插入新元素。
删除元素时操作类似,当已使用内存空间比预分配内存空间的一半还少时,会另外申请一块小内存,做一次元素复制,之后销毁原有大内存空间。 - 因此,如果有频繁的新增、删除操作,新增、删除的元素数量又很多时,list的效率不高。此时,应该考虑使用collections.deque。collections.deque是双端队列,同时具备栈和队列的特性,能够在两端进行 O(1) 复杂度的插入和删除操作。
- list的查找操作也非常耗时。当需要在list频繁查找某些元素,或频繁有序访问这些元素时,可以使用bisect维护list对象有序并在其中进行二分查找,提升查找的效率。
另外一个常见需求是查找极小值或极大值,此时可以使用heapq模块将list转化为一个堆,使得获取最小值的时间复杂度是 O(1)。
下面的网页给出了常用的 Python 数据结构的各项操作的时间复杂度:https://wiki.python.org/moin/TimeComplexity
1、input (转化为int)
Python3.x 中 input() 函数接受一个标准输入数据,返回为 string 类型。
# 将输入的变量,以空格划分
x,y,z = list(map(int, input().split()))
当然除了input()函数还有sys模块带有标准输入
,一般情况下比input()函数快4倍,这里注意下区别,input()把读到的行用字符串的形式返回,但不会返回行尾的换行符,而sys.stdin.readline()
则会,加上strip()函数效果就一样了
arr=sys.stdin.readline().strip()
2、split
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串。返回分割后的字符串列表。
str.split(str="", num=string.count(str)).
- str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
- num -- 分割次数。默认为 -1, 即分隔所有。
3、List
空间申请
IndexError:list assignment index out of range
ERROR code
b = []
for i in range(10):
b[i] = 7
空数组不能直接指定位置,list是一个空的,没有一个元素,进行list[0]就会出现错误!
解决方法1
b.append(1)
解决方法2
生成一个定长的list:
b=[0]*len(data)
b[1]=1
list的插入和删除
aList = [123, 'xyz', 'zara', 'abc', 'xyz'];
aList.remove('xyz')
alist.insert(index,obj)
obj=alist.pop(index) #defalut index=-1即最后一个元素
4、输出格式如1 2 3 4
ans=[1,2,3,4]
print(' '.join(map(str,ans)))
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回
参考
https://blog.csdn.net/u013495762/article/details/82870455
https://www.cnblogs.com/lincappu/p/8179475.html(map函数用法)
https://blog.csdn.net/www_helloworld_com/article/details/82875433