竞争性编码的Python技巧

对于大多数竞争性编程挑战,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