ฉันได้อ่านหนังสือการเขียนโปรแกรมCore Pythonและผู้เขียนแสดงตัวอย่างเช่น:
(4, 5) < (3, 5) # Equals false
ดังนั้นฉันสงสัยว่ามันเป็นเท็จอย่างไร / ทำไมเท่ากัน? ไพ ธ อนเปรียบเทียบทูเปิลทั้งสองนี้อย่างไร
Btw มันไม่ได้อธิบายไว้ในหนังสือ
ฉันได้อ่านหนังสือการเขียนโปรแกรมCore Pythonและผู้เขียนแสดงตัวอย่างเช่น:
(4, 5) < (3, 5) # Equals false
ดังนั้นฉันสงสัยว่ามันเป็นเท็จอย่างไร / ทำไมเท่ากัน? ไพ ธ อนเปรียบเทียบทูเปิลทั้งสองนี้อย่างไร
Btw มันไม่ได้อธิบายไว้ในหนังสือ
คำตอบ:
สิ่งอันดับจะถูกเปรียบเทียบตามตำแหน่ง: รายการแรกของสิ่งอันดับแรกถูกเปรียบเทียบกับรายการแรกของสิ่งอันดับที่สอง; หากไม่เท่ากัน (เช่นอันแรกมากกว่าหรือเล็กกว่าสอง) นั่นคือผลลัพธ์ของการเปรียบเทียบมิฉะนั้นจะถือว่ารายการที่สองเป็นรายการที่สามและอื่น ๆ
ลำดับประเภทเดียวกันยังรองรับการเปรียบเทียบ โดยเฉพาะอย่างยิ่งสิ่งอันดับและรายการจะถูกเปรียบเทียบด้วยพจนานุกรมโดยการเปรียบเทียบองค์ประกอบที่เกี่ยวข้อง ซึ่งหมายความว่าในการเปรียบเทียบเท่ากันทุกองค์ประกอบจะต้องเปรียบเทียบเท่ากันและลำดับที่สองจะต้องเป็นประเภทเดียวกันและมีความยาวเท่ากัน
ด้วยการเปรียบเทียบมูลค่าสำหรับรายละเอียดเพิ่มเติม:
การเปรียบเทียบคำศัพท์ระหว่างคอลเลกชันในตัวทำงานดังนี้:
- สำหรับคอลเลกชันสองรายการที่จะเปรียบเทียบเท่ากันพวกเขาจะต้องเป็นประเภทเดียวกันมีความยาวเท่ากันและแต่ละคู่ขององค์ประกอบที่เกี่ยวข้องจะต้องเปรียบเทียบเท่ากัน (ตัวอย่างเช่น
[1,2] == (1,2)
เป็นเท็จเพราะประเภทนั้นไม่เหมือนกัน)- คอลเลกชันที่สนับสนุนการเปรียบเทียบคำสั่งซื้อจะได้รับคำสั่งเหมือนกับองค์ประกอบที่ไม่เท่ากันเป็นครั้งแรก (ตัวอย่างเช่น
[1,2,x] <= [1,2,y]
มีค่าเหมือนกันx <= y
) หากไม่มีองค์ประกอบที่สอดคล้องกันจะมีการเรียงลำดับคอลเลกชันที่สั้นลงก่อน (เช่น[1,2] < [1,2,3]
เป็นจริง)
หากไม่เท่ากันลำดับจะเรียงตามลำดับเหมือนกับองค์ประกอบที่แตกต่างกันแรก ตัวอย่างเช่น cmp ([1,2, x], [1,2, y]) จะส่งกลับเช่นเดียวกับ cmp (x, y) หากองค์ประกอบที่เกี่ยวข้องไม่มีอยู่ลำดับที่สั้นกว่าจะถือว่าเล็กกว่า (ตัวอย่างเช่น [1,2] <[1,2,3] จะส่งกลับค่า True)
หมายเหตุ 1 : <
และ>
ไม่ได้หมายความว่า "เล็กกว่า" และ "มากกว่า" แต่ "อยู่ก่อน" และ "หลัง": ดังนั้น (0, 1) "อยู่ก่อน" (1, 0)
หมายเหตุ 2 : tuples จะต้องไม่ถูกพิจารณาว่าเป็นพาหะในพื้นที่ n- มิติเปรียบเทียบกับความยาวของมัน
หมายเหตุ 3 : หมายถึงคำถาม/programming/36911617/python-2-tuple-comparison : อย่าคิดว่า tuple นั้น "ยิ่งใหญ่" กว่าอีกสิ่งหนึ่งหากองค์ประกอบใด ๆ ขององค์ประกอบแรกมากกว่าที่สอดคล้องกัน หนึ่งในสอง
x = tuple([0 for _ in range(n)])
และทำเช่นเดียวกันกับ y การตั้งค่า n = 100, 1,000, 10,000 และ 100,000 และการวิ่ง%timeit x==y
ให้ค่าเวลาเป็น. 5, 4.6, 43.9 และ 443 microseconds ตามลำดับซึ่งใกล้เคียงกับ O (n) เท่าที่คุณจะได้รับจริง
<
และ>
ไม่ได้หมายความว่า "เล็กลงแล้ว" และ "ยิ่งกว่านั้น" แต่ "มาก่อน" และ "กลับมา": ดังนั้น(0, 1)
"มาก่อน"(1, 0)
เอกสารหลามจะอธิบายได้
สิ่งอันดับและรายการจะถูกเปรียบเทียบโดยใช้การเปรียบเทียบขององค์ประกอบที่เกี่ยวข้อง ซึ่งหมายความว่าในการเปรียบเทียบเท่ากันแต่ละองค์ประกอบจะต้องเปรียบเทียบเท่ากันและสองลำดับจะต้องเป็นประเภทเดียวกันและมีความยาวเท่ากัน
หลาม 2.5 เอกสารอธิบายมันได้ดี
สิ่งอันดับและรายการจะถูกเปรียบเทียบโดยใช้การเปรียบเทียบขององค์ประกอบที่เกี่ยวข้อง ซึ่งหมายความว่าในการเปรียบเทียบเท่ากันแต่ละองค์ประกอบจะต้องเปรียบเทียบเท่ากันและสองลำดับจะต้องเป็นประเภทเดียวกันและมีความยาวเท่ากัน
หากไม่เท่ากันลำดับจะเรียงตามลำดับเหมือนกับองค์ประกอบที่แตกต่างกันแรก ตัวอย่างเช่น cmp ([1,2, x], [1,2, y]) จะส่งกลับเช่นเดียวกับ cmp (x, y) หากไม่มีองค์ประกอบที่เกี่ยวข้องลำดับที่สั้นกว่านั้นจะถูกเรียงลำดับก่อน (เช่น [1,2] <[1,2,3])
น่าเสียดายที่หน้านั้นดูเหมือนว่าจะหายไปในเอกสารประกอบสำหรับรุ่นล่าสุด
a = ('A','B','C') # see it as the string "ABC"
b = ('A','B','D')
A ถูกแปลงเป็น ASCII ที่สอดคล้องord('A') #65
กันเหมือนกันสำหรับองค์ประกอบอื่น ๆ
ดังนั้น
>> a>b # True
คุณสามารถคิดว่ามันเป็นการเปรียบเทียบระหว่างสตริง (มันเป็นจริง)
สิ่งเดียวกันสำหรับจำนวนเต็มเกินไป
x = (1,2,2) # see it the string "123"
y = (1,2,3)
x > y # False
เพราะ (1 ไม่มากกว่า 1 ย้ายไปที่ถัดไป 2 ไม่มากกว่า 2 ย้ายไปที่ 2 ถัดไปน้อยกว่าสาม -lexicographically -)
จุดสำคัญถูกกล่าวถึงในคำตอบข้างต้น
คิดว่ามันเป็นองค์ประกอบอยู่ก่อนที่ตัวอักษรอื่นองค์ประกอบไม่มากกว่าองค์ประกอบและในกรณีนี้พิจารณาองค์ประกอบ tuple ทั้งหมดเป็นหนึ่งสตริง
(1,2,3) > (1,2,2)
ให้True
<
>
ยกตัวอย่างเช่นการประเมิน(0, 1) < (1, 0)
True