对于大多数竞争性编程挑战,Python是编程人员中首选的语言之一。大多数问题都可以使用python在合理的时间范围内轻松计算出来。
对于某些复杂的问题,编写足够快的python代码通常是一个挑战。以下是一些Pythonic代码构造,可帮助您提高代码在竞争性编码中的性能-
1.字符串连接:请勿使用以下构造。
str1 = "" some_list = ["Welcome ", "To ", "Nhooo "] for x in some_list: str1 += x print(str1)
上面的方法会浪费大量时间,请尝试使用此方法(join方法)-
str1 = "" some_list = ["Welcome ", "To ", "Nhooo "] print(str1.join(some_list))
2.映射功能
通常,您会在竞争性编码中输入一些信息,例如-
1234567
简单地将它们作为数字列表
list(map (int, input().split()))
input()
无论输入类型如何,请始终使用该函数,然后使用map函数对其进行转换。
>>> list(map(int, input("输入数字:").split())) 输入数字:1 2 3 4 5 6 7 [1, 2, 3, 4, 5, 6, 7] >>>
map函数是python的漂亮内置函数之一,它可以多次使用。值得知道。
3.收款模块
如果我们想从列表中删除重复项。虽然在其他语言(例如Java)中,您可能不得不使用HashMap或其他任何怪异的方式,但是,在pytho中,它只是
>>> 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