For loop ใน Python มีคุณสมบัติที่แตกต่างจากภาษาโปรแกรมอื่นๆ ฉันฝากสิ่งที่คุณกำลังเรียนรู้เพื่อใช้ประโยชน์สูงสุดจากลูปที่ใช้บ่อยที่สุด
ใน Python มีจุดมุ่งหมายเพื่อทำซ้ำผ่านวัตถุที่ทำซ้ำได้ ไม่ว่าจะเป็นรายการ วัตถุ หรือองค์ประกอบอื่น
โครงสร้างต่อไปนี้คือ
h2=[ 'Valencia', 'Castellón', 'Alicante'] for j in h2: instructions
ที่นี่ h2 เป็นองค์ประกอบที่ทำซ้ำได้ เช่น รายการ h2=[ 'Valencia', 'Castellón', 'Alicante'] การวนซ้ำจะมีการวนซ้ำ 3 ครั้ง ในครั้งแรก j=Valencia ในตัวแปรที่สอง j=Castellón
และด้วยสิ่งนี้ เราสามารถกำหนดคำสั่งที่เราต้องการ จดจำการเยื้อง บางสิ่งที่จำเป็นใน Python และคนจำนวนมากเพิกเฉย ได้รับข้อผิดพลาดในโค้ด
วนซ้ำจำนวนครั้งที่แน่นอน
หากเราต้องการให้มันทำซ้ำจำนวนครั้งที่เราทำได้ใน C++ เราจะต้องใช้ range() ในการวนซ้ำ 10 ครั้ง เราจะใช้ a
for element in Range(9): instructions
เราใส่ 9 ไม่ใช่ 10 เพราะช่วงเริ่มต้นจาก 0 ดังนั้นจาก 0 ถึง 9 มีการวนซ้ำ 10 ครั้งหรือรอบของลูป
Knowing Range() ช่วยให้เราใส่ตัวแปรแทนการใส่ตัวเลขเข้าไปได้ ซึ่งเราจะสามารถควบคุมได้มากขึ้น
var = 10 for element in Range(var): instructions
ฟังก์ชั่น Range มีตัวเลือกมากมาย ฉันจะพูดถึงมันในโพสต์อื่น เพื่อไม่ให้ผสมเนื้อหาและพัฒนามันให้มากที่สุด
สามารถควบคุมโฟลว์ของ for loop ได้อีกมากมาย
ทำลายและดำเนินการต่องบ
มี 2 ฟีเจอร์ที่มีประโยชน์มากที่ช่วยให้เราสร้าง for loop ที่ใช้งานได้ดีมาก fon the break และ Continue มักใช้กับเงื่อนไข ถ้าตรวจสอบว่ามีบางอย่างจริงหรือไม่
พวกมันทำงานในลูปอื่น ๆ และมีคำสั่งที่น่าสนใจอีกอย่างหนึ่งคือ pass ซึ่งเป็นคำสั่งที่ดำเนินการแต่ไม่ทำอะไรเลย และเหมาะอย่างยิ่งสำหรับเวลาที่เราต้องการกำหนดโครงสร้างที่ต้องใช้คำสั่ง แต่เราต้องการวางไว้ในภายหลัง (ความคิดเห็นคือ ไม่มีประโยชน์สำหรับสิ่งนี้)
ทำลาย
ด้วยการหยุดพัก เราสามารถออกจากลูปได้ตลอดเวลา อย่างที่คุณจินตนาการว่ามีประโยชน์มาก มันเป็นความจริงที่มีโครงสร้างอื่น ๆ เช่นในขณะที่,
numeros = [1, 2, 4, 3, 5, 8, 6] for n in numeros: if n == 3: break else: print('No se encontró el número 3')
ต่อ
มันทำให้เราไปที่องค์ประกอบถัดไปในวง
numeros = [1, 2, 4, 3, 5, 8, 6] for n in numeros: if n == 3: continue else: print('No se encontró el número 3')
https://j2logo.com/bucle-for-en-python/
สำหรับ … อื่น
มีโครงสร้างที่มาจาก For ซึ่งสำหรับ …else
datos = [1, 2, 3, 4, 5] for n in datos: if n == 2: break else: print('No hay 2')
โครงสร้างนี้เกิดขึ้นหลังจากที่พวกเขาเห็นว่าจำเป็นและหลายคนกำลังใช้วิธีอื่นเพื่อบรรลุเป้าหมายนี้ ดังนั้นพวกเขาจึงช่วยเหลือผู้คนและรับรหัสที่อ่านง่ายขึ้น
สำหรับ _ ใน iterable
ฉันเคยเห็นสิ่งนี้ในบางโปรแกรมแม้ว่าฉันไม่เคยใช้
เมื่อเรากำลังวนซ้ำวัตถุ รายการ พจนานุกรม ฯลฯ แต่เนื้อหาขององค์ประกอบเหล่านั้นไม่สนใจเรา เราสามารถระบุด้วย _
ตัวอย่าง:
เราต้องการนับองค์ประกอบของรายการ แต่เราไม่สนใจว่าองค์ประกอบนั้นประกอบด้วยอะไร เราแค่ต้องการความยาวของมัน
h2=[ 'Valencia', 'Castellón', 'Alicante'] count = 0 for _ in h2: cont += 1
ในหลาย ๆ ไซต์พวกเขาแนะนำไม่ให้ละเมิดแนวปฏิบัตินี้ ฉันไม่รู้ข้อดีของมันจริง ๆ ว่ามันเร็วกว่าไหม
วนไปข้างหลัง
ย้อนกลับสำหรับลูป ย้ำตั้งแต่ต้นจนจบ
มันใช้ฟังก์ชัน reversed() ที่นำมาใช้ใน python 3
h2=[ 'Valencia', 'Castellón', 'Alicante'] for j in reversed(h2): print (j)
วนรอบด้วยสองดัชนี ค่าของ iterable และ index
ด้วย enumerate() เราสามารถทำงานกับดัชนีของคอลเลกชันได้ เพราะหลายครั้งที่นอกเหนือไปจากค่าของวัตถุ iterable เอง เราสนใจดัชนีของมัน
h2=[ 'Valencia', 'Castellón', 'Alicante'] for j, h in enumerate(h2): print j, '-->', h2[i]
วนซ้ำมากกว่า 2 รายการ
อีกตัวเลือกหนึ่งที่น่าสนใจมากคือ zip() ซึ่งจะทำให้งานของเราง่ายขึ้นและจะทำให้โค้ดของเราง่ายขึ้นและอ่านง่ายขึ้น
h2=[ 'Valencia', 'Castellón', 'Alicante'] cod=[100, 200, 300] for j, h in zip(h2, cod): print h2, '-->', cod
ใน Python 2.x izip() ถูกใช้เพื่อปรับปรุงฟังก์ชันนี้ แต่ใน Python 3 izip คือ zip()
วนซ้ำตามลำดับ
วนซ้ำตามลำดับตามค่าของวัตถุแทนที่จะเป็นดัชนี ใช้ sorted()
colors = ['rojo', 'amarillo', 'verde'] for color in sorted(colors): print color
และถ้าเราต้องการทำย้อนกลับ
colors = ['rojo', 'amarillo', 'verde'] for color in sorted(colors, reverse=True): print color
ลำดับการจัดเรียงแบบกำหนดเอง
colors = ['rojo', 'amarillo', 'verde'] for color in sorted(colors, key=len): print color
ค่า Sentinel ในการวนซ้ำ
ค่า Sentinel เป็นค่าที่ทำให้การวนซ้ำสิ้นสุดลง มักจะนำเสนอในขณะที่วนซ้ำ แต่ Raymond Hettinger แสดงให้เราเห็นว่าจะใช้ a for ซึ่งเร็วกว่า
blocks = [] for block in iter(partial(f.read, 32), ''): blocks.append(block) print (block)
พจนานุกรมสำรวจด้วย for
พจนานุกรมเป็นเครื่องมือที่จำเป็นสำหรับการแสดงความสัมพันธ์และการจัดกลุ่ม
ท่องดิกชันนารีแบบเดิมๆ ได้ด้วย for แต่นั่นจะไม่คืนข้อมูลทั้งหมด เราจะไม่สามารถทำงานกับค่าและดัชนีแบบนั้นได้ ถ้าเราไม่เริ่มเพิ่มตัวนับและตัวนับอื่นๆ องค์ประกอบ
d = {'casa': 'azul', 'coche': 'rojo', 'hombre': 'verde'} for k in d.keys(): if k.startswith('r'): del d[k]
ด้วยวิธีนี้ นอกจากการดูองค์ประกอบแล้ว เราสามารถแก้ไขพจนานุกรมโดยการเปลี่ยนองค์ประกอบหรือลบออก ในเวลาเดียวกันกับการวนซ้ำ for
d.keys() เรียกใช้อาร์กิวเมนต์และทำสำเนาที่เก็บอยู่ในรายการที่เราสามารถแก้ไขได้
เพื่อให้ได้ดัชนีและค่านิยมแทนสิ่งดั้งเดิมและนั่นคือสิ่งแรกที่อยู่ในใจสำหรับพวกเราที่เริ่มเขียนโปรแกรม
for k in d: print k, '-->', d[k]
เราจะใช้ตัวเลือกที่เร็วกว่านี้มาก
for k, v in d.items(): print k, '-->', v
iteritems() มากกว่า item()
พูดคุยเกี่ยวกับลูปใน Python โดย Raymond Hettinger
เป็นวิดีโอเก่าแต่มีภาพประกอบ โดยในช่วง 20 นาทีแรก Raymond Hettinger สอนเราถึงความเป็นไปได้ต่างๆ ของลูปใน Python และให้ตัวอย่างว่าพวกเขาแปลงโครงสร้างที่ผู้คนใช้กันอย่างแพร่หลายให้เป็นฟังก์ชันอย่างไร เพื่อให้วงอ่านง่ายขึ้นและง่ายขึ้น . รหัส.