ฉันกำลังวิเคราะห์โค้ด Python และไม่รู้ว่าอะไร
pop = population[:]
หมายถึง. มันเป็นรายการอาร์เรย์ใน Java หรือเหมือนอาร์เรย์สองมิติหรือไม่?
ฉันกำลังวิเคราะห์โค้ด Python และไม่รู้ว่าอะไร
pop = population[:]
หมายถึง. มันเป็นรายการอาร์เรย์ใน Java หรือเหมือนอาร์เรย์สองมิติหรือไม่?
list
s ให้clear
และcopy
วิธีการเทียบเท่ากับการทำdel mylist[:]
หรือmylist[:]
ตามลำดับ โดยทั่วไปแล้วไม่จำเป็นต้องใช้ลำดับที่เปลี่ยนแปลงได้ดังนั้นหากคุณอาจได้รับลำดับที่ผันแปรได้โดยพลการคุณต้องการยึดติดกับการดำเนินการตามส่วน แต่อย่างน้อยวิธีการที่ตั้งชื่อก็มีให้ใช้งานlist
ได้
คำตอบ:
มันเป็นตัวอย่างของสัญกรณ์สไลซ์และสิ่งที่ทำขึ้นอยู่กับประเภทของpopulation
. ถ้าpopulation
เป็นรายการบรรทัดนี้จะสร้างสำเนาตื้นของรายการ สำหรับอ็อบเจ็กต์ประเภทtuple
หรือ a str
จะไม่ทำอะไรเลย (บรรทัดจะทำเช่นเดียวกันโดยไม่มี[:]
) และสำหรับอาร์เรย์ NumPy (พูด) จะสร้างมุมมองใหม่สำหรับข้อมูลเดียวกัน
l.copy()
จะอ่านได้มากกว่า แต่มันใช้ไม่ได้
list(l)
ใช้งานได้เสมออ่านง่ายขึ้นและรับประกันว่าจะส่งคืนสำเนาแม้จะมีบางอย่างเช่นnumpy.array
list.clear()
ใช่ข้าง แม้ว่าจะต้องใช้เวลาสักระยะหนึ่งกว่าจะนำไปสู่การลดคำถามประเภทนี้ใน SO ได้อย่างมีนัยสำคัญ :)
A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)]
ฉันมักจะชอบnumpy.rollaxis(A, axis, 0)[k]
มากกว่า โดยทั่วไปแล้วฉันไม่ค่อยเจอกรณีการใช้งานที่คุณต้องสร้างslice()
วัตถุโดยตรง หากคุณต้องการพวกเขาอยู่แล้ว NumPy มีตัวs_
ช่วยเป็นทางเลือกในการสร้างพวกเขา
นอกจากนี้ยังอาจช่วยให้ทราบว่าส่วนของรายการโดยทั่วไปจะทำสำเนาส่วนหนึ่งของรายการ เช่นpopulation[2:4]
จะส่งคืนรายการที่มีประชากร [2] และประชากร [3] (การแบ่งส่วนเป็นสิทธิ์เฉพาะ) ออกจากดัชนีซ้ายและขวาเนื่องจากpopulation[:]
ค่าเริ่มต้นเป็น 0 และความยาว (ประชากร) ตามลำดับดังนั้นการเลือกรายการทั้งหมด ดังนั้นนี่เป็นสำนวนทั่วไปในการทำสำเนารายการ
ดี ... นี่ขึ้นอยู่กับบริบทจริงๆ ในที่สุดก็ผ่านslice
วัตถุ ( slice(None,None,None)
) เพื่อวิธีใดวิธีหนึ่งดังต่อไปนี้: __getitem__
, หรือ__setitem__
__delitem__
(ที่จริงถ้าวัตถุมี__getslice__
จะถูกใช้แทน__getitem__
แต่ตอนนี้เลิกใช้แล้วและไม่ควรใช้)
ออบเจ็กต์สามารถทำสิ่งที่ต้องการได้ด้วยชิ้นส่วน
ในบริบทของ:
x = obj[:]
สิ่งนี้จะเรียกobj.__getitem__
ด้วยวัตถุชิ้นที่ส่งผ่านในความเป็นจริงสิ่งนี้เทียบเท่ากับ:
x = obj[slice(None,None,None)]
(แม้ว่าแบบเดิมน่าจะมีประสิทธิภาพมากกว่าเพราะไม่ต้องค้นหาตัวslice
สร้าง - ทั้งหมดนี้ทำใน bytecode)
สำหรับวัตถุส่วนใหญ่นี่เป็นวิธีสร้างสำเนาตื้นของส่วนหนึ่งของลำดับ
ต่อไป:
x[:] = obj
เป็นวิธีการตั้งค่ารายการ (มันเรียก__setitem__
) ตามobj
.
และฉันคิดว่าคุณอาจเดาได้ว่า:
del x[:]
โทร ;-).
คุณยังสามารถส่งผ่านชิ้นต่างๆได้:
x[1:4]
โครงสร้าง slice(1,4,None)
x[::-1]
โครงสร้างslice(None,None,-1)
และอื่น ๆ อ่านเพิ่มเติม: อธิบายสัญกรณ์ชิ้นส่วนของ Python
มันเป็นชิ้นจากจุดเริ่มต้นของลำดับไปยังจุดสิ้นสุดโดยปกติจะสร้างสำเนาตื้น ๆ
(มันมีมากกว่านั้นแต่คุณยังไม่จำเป็นต้องสนใจ)
สร้างสำเนาของรายการเทียบกับการกำหนดชื่อใหม่สำหรับรายการที่มีอยู่แล้ว
[:]
ใช้สำหรับลิมิตเตอร์หรือการแบ่งส่วนในอาร์เรย์แฮช
เช่น
[1: 5] สำหรับการแสดงค่าระหว่าง 1 รวมและ 5 เอกสิทธิ์เช่น 1-4
[เริ่มต้น: สิ้นสุด]
โดยทั่วไปใช้ในอาร์เรย์สำหรับการแบ่งส่วนเข้าใจวงเล็บยอมรับตัวแปรที่หมายถึง ค่าหรือคีย์ที่จะแสดงและ ":" ใช้เพื่อ จำกัด หรือแบ่งอาร์เรย์ทั้งหมดลงในแพ็กเก็ต
a[1:5]
ส่งกลับองค์ประกอบ 1-4 ไม่ใช่ 2-4