Python 竞赛编程技巧
Python 是大多数竞赛编程挑战中程序员首选的语言之一。大多数问题都可以在合理的时间范围内使用 Python轻松计算。
对于一些复杂的问题,编写足够快的 Python 代码通常是一个挑战。以下是帮助提高竞赛编程中代码性能的一些 Python 式代码结构:
1. 字符串连接: 不要使用以下结构。
str1 = "" some_list = ["Welcome ", "To ", "Tutorialspoint "] for x in some_list: str1 += x print(str1)
以上方法会造成巨大的时间开销。 相反,尝试使用这个(join 方法):
str1 = "" some_list = ["Welcome ", "To ", "Tutorialspoint "] print(str1.join(some_list))
2. map 函数
通常,在竞赛编程中,你会有这样的输入:
1234567
要将它们作为数字列表,只需:
list(map (int, input().split()))
始终使用 input() 函数,无论输入类型如何,然后使用 map 函数进行转换。
>>> list(map(int, input("enter numbers:").split()))
enter numbers:1 2 3 4 5 6 7
[1, 2, 3, 4, 5, 6, 7]
>>>map 函数是 Python 的一个非常实用的内置函数,在很多情况下都非常有用。值得学习。
3. collections 模块
如果我们想从列表中删除重复项。在 Java 等其他语言中,你可能需要使用 HashMap 或其他方法,但在 Python 中,它很简单:
>>> print(list(set([1,2,3,4,3,4,5,6]))) [1, 2, 3, 4, 5, 6]
此外,在合并两个或多个列表时,要注意使用 extend() 和 append()。
>>> a = [1, 2, 3,4] # list 1 >>> b = [5, 6, 7] # list 2 >>> a.extend(b)#gives one list >>> a [1, 2, 3, 4, 5, 6, 7] >>> a.append(b) # gives list of list >>> a [1, 2, 3, 4, [5, 6, 7]]
4. 语言结构
最好在函数内编写代码,尽管 Python 支持过程式代码。
def main(): for i in range(2**3): print(x) main()
比这要好得多:
for x in range(2**3): print(x)
由于底层的 CPython 实现,存储局部变量比全局变量更快。
5. 使用标准库
最好尽可能多地使用内置函数和标准库包。在那里,而不是:
newlist = [] for x in somelist: newlist.append(myfunc(x))
使用这个:
newlist = map(myfunc, somelist)
同样,尝试使用 itertools(标准库),因为它们对于常见任务来说速度要快得多。例如,你可以用几行代码实现排列循环。
>>> import itertools
>>> iter = itertools.permutations(["a","b","c"])
>>> list(iter)
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]6. 生成器
生成器是减少内存占用和已编写代码的平均时间复杂度的优秀结构。
def fib(): a, b = 0, 1 while 1: yield a a, b = b, a+b
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP