Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Tricks สำหรับการเข้ารหัสการแข่งขัน


Python เป็นหนึ่งในภาษาที่ต้องการในหมู่นักเขียนโค้ดสำหรับความท้าทายด้านการเขียนโปรแกรมการแข่งขันส่วนใหญ่ ปัญหาส่วนใหญ่คำนวณได้ง่ายในกรอบเวลาที่เหมาะสมโดยใช้ python

สำหรับปัญหาที่ซับซ้อนบางอย่าง การเขียนโค้ดหลามที่เร็วพอมักจะเป็นเรื่องที่ท้าทาย ด้านล่างนี้คือโครงสร้างของโค้ด pythonic ที่ช่วยปรับปรุงประสิทธิภาพของโค้ดของคุณในการเขียนโค้ดที่แข่งขันได้ -

1. การต่อสายอักขระ :อย่าใช้โครงสร้างด้านล่าง

str1 = ""
some_list = ["Welcome ", "To ", "Tutorialspoint "]
for x in some_list:
   str1 += x
print(str1)

วิธีข้างต้นให้เวลามาก ลองใช้วิธีนี้ (วิธีเข้าร่วม) แทน -

str1 = ""
some_list = ["Welcome ", "To ", "Tutorialspoint "]
print(str1.join(some_list))

2. ฟังก์ชันแผนที่

โดยทั่วไปแล้ว คุณมีข้อมูลในการเขียนโค้ดที่แข่งขันได้ อย่างเช่น −

1234567

เพื่อให้ได้มาเป็นรายการตัวเลขง่ายๆ

list(map (int, input().split()))

ใช้ฟังก์ชันอินพุต () เสมอโดยไม่คำนึงถึงประเภทของอินพุต จากนั้นแปลงโดยใช้ฟังก์ชันแผนที่

>>> list(map(int, input("enter numbers:").split()))
enter numbers:1 2 3 4 5 6 7
[1, 2, 3, 4, 5, 6, 7]
>>>

ฟังก์ชั่นแผนที่เป็นหนึ่งในฟังก์ชั่นที่สวยงามในตัวของ python ซึ่งมีประโยชน์หลายครั้ง น่ารู้.

3. โมดูลคอลเลกชัน

ในกรณีที่เราต้องการลบรายการที่ซ้ำกันออกจากรายการ ในขณะที่ในภาษาอื่น ๆ เช่น Java คุณอาจต้องใช้ HashMap หรือวิธีอื่น ๆ อย่างไรก็ตามใน pytho นั้นง่ายมาก

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

นอกจากนี้ ระมัดระวังในการใช้ expand() และ 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)

การจัดเก็บตัวแปรในเครื่องนั้นเร็วกว่า globals เนื่องจากการใช้งาน 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