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

更新于:2019年7月30日

2K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.