Computer >> 컴퓨터 >  >> 프로그램 작성 >> 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. 지도 기능

일반적으로 경쟁 코딩에는 다음과 같은 입력이 있습니다.

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]
>>>

지도 기능은 여러 번 편리하게 사용할 수 있는 아름다운 파이썬 내장 기능 중 하나입니다. 알 가치가 있습니다.

3. 컬렉션 모듈

목록에서 중복을 제거하려는 경우. Java와 같은 다른 언어에서는 HashMap 또는 다른 이상한 방법을 사용해야 할 수도 있지만 pytho에서는 간단합니다.

>>> print(list(set([1,2,3,4,3,4,5,6])))
[1, 2, 3, 4, 5, 6]

또한 두 개 이상의 목록을 병합하는 동안 목록에서 확장() 및 추가()를 사용하는 데 주의하십시오.

>>> 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