ประเภทชุดในตัว ชุดคือคอลเล็กชันค่าที่ไม่ซ้ำกันซึ่งเปลี่ยนแปลงได้และวนซ้ำได้ ซึ่งก็คือองค์ประกอบของชุด ชื่อประเภทของชุดคือ "set"
ชุดจะดำเนินการแบบใช้เวลาคงที่เพื่อแทรก นําออก หรือตรวจสอบว่ามีค่าหรือไม่ ชุดจะใช้ตารางแฮช ดังนั้นองค์ประกอบของชุดจึงต้องแฮชได้เช่นเดียวกับคีย์ของพจนานุกรม ค่าอาจใช้เป็นองค์ประกอบของเซตได้ก็ต่อเมื่อสามารถใช้เป็นคีย์ของพจนานุกรม
คุณอาจสร้างชุดโดยใช้ฟังก์ชันในตัว set()
ซึ่งจะแสดงผลชุดใหม่ที่มีองค์ประกอบที่ไม่ซ้ำกันของอาร์กิวเมนต์ที่ไม่บังคับ ซึ่งต้องเป็นแบบวนซ้ำได้ การเรียก set()
โดยไม่มีอาร์กิวเมนต์จะสร้างเซตว่าง ชุดข้อมูลไม่มีไวยากรณ์แบบตัวอักษร
การดำเนินการ in
และ not in
จะตรวจสอบว่าค่าอยู่ใน (หรือไม่อยู่ใน) เซ็ตหรือไม่
s = set(["a", "b", "c"]) "a" in s # True "z" in s # False
ชุดเป็นชุดข้อมูลที่วนซ้ำได้ จึงอาจใช้เป็นออบเจ็กต์การดำเนินการของfor
ลูป การรวมลิสต์ และฟังก์ชันในตัวต่างๆ ที่ทำงานกับชุดข้อมูลที่วนซ้ำได้ คุณสามารถเรียกดูความยาวของชุดโดยใช้ฟังก์ชันในตัว len()
และลําดับของการวนซ้ำคือลําดับที่เพิ่มองค์ประกอบลงในชุดเป็นครั้งแรก ดังนี้
s = set(["z", "y", "z", "y"]) len(s) # prints 2 s.add("x") len(s) # prints 3 for e in s: print e # prints "z", "y", "x"
ชุดที่ใช้ในบริบทบูลีนจะเป็นจริงก็ต่อเมื่อชุดนั้นไม่ว่างเปล่าเท่านั้น
s = set() "non-empty" if s else "empty" # "empty" t = set(["x", "y"]) "non-empty" if t else "empty" # "non-empty"
คุณเปรียบเทียบชุดข้อมูลเพื่อดูความเท่าเทียมหรือไม่เท่าเทียมได้โดยใช้ ==
และ !=
เซ็ต s
เท่ากับ t
ก็ต่อเมื่อ t
เป็นเซ็ตที่มีองค์ประกอบเดียวกัน ลำดับการวนซ้ำไม่สำคัญ โดยเฉพาะอย่างยิ่ง ชุดไม่เท่ากับรายการองค์ประกอบ ระบบจะไม่จัดเรียงชุดตามชุดอื่นๆ และการพยายามเปรียบเทียบชุด 2 ชุดโดยใช้ <
, <=
, >
, >=
หรือจัดเรียงชุดลำดับต่างๆ จะดำเนินการไม่สำเร็จ
set() == set() # True set() != [] # True set([1, 2]) == set([2, 1]) # True set([1, 2]) != [1, 2] # True
การดำเนินการ |
ในชุด 2 ชุดจะแสดงผลรวมของชุด 2 ชุดนั้น ซึ่งเป็นชุดที่มีองค์ประกอบที่พบในชุดเดิมชุดใดชุดหนึ่งหรือทั้ง 2 ชุด
set([1, 2]) | set([3, 2]) # set([1, 2, 3])
การดำเนินการ &
ในชุด 2 ชุดจะแสดงผลลัพธ์ที่ตัดกันของชุด 2 ชุด ซึ่งเป็นชุดที่มีเฉพาะองค์ประกอบที่พบในชุดเดิมทั้ง 2 ชุด
set([1, 2]) & set([2, 3]) # set([2]) set([1, 2]) & set([3, 4]) # set()
การดำเนินการ -
ในชุด 2 ชุดจะแสดงผลต่างของ 2 ชุดนั้นๆ ซึ่งก็คือชุดที่มีองค์ประกอบที่พบในชุดด้านซ้ายมือแต่ไม่พบในชุดด้านขวามือ
set([1, 2]) - set([2, 3]) # set([1]) set([1, 2]) - set([3, 4]) # set([1, 2])
การดำเนินการ ^
ในชุด 2 ชุดจะแสดงผลต่างแบบสมมาตรของชุด 2 ชุดนั้นๆ ซึ่งก็คือชุดที่มีองค์ประกอบที่พบในชุดเดิมเพียงชุดเดียว แต่ไม่ได้อยู่ในทั้ง 2 ชุด
set([1, 2]) ^ set([2, 3]) # set([1, 3]) set([1, 2]) ^ set([3, 4]) # set([1, 2, 3, 4])
ในการดำเนินการแต่ละรายการข้างต้น เอลิเมนต์ของชุดผลลัพธ์จะยังคงอยู่ในลําดับจากชุดโอเปอเรนด 2 ชุด โดยเอลิเมนต์ทั้งหมดที่ดึงมาจากด้านซ้ายจะจัดเรียงไว้ก่อนเอลิเมนต์ที่ปรากฏเฉพาะทางด้านขวา
ตัวแปรที่เพิ่มเข้ามาที่เกี่ยวข้อง ซึ่งได้แก่ |=
, &=
, -=
และ ^=
จะแก้ไขชุดที่อยู่ทางด้านซ้าย
s = set([1, 2]) s |= set([2, 3, 4]) # s now equals set([1, 2, 3, 4]) s &= set([0, 1, 2, 3]) # s now equals set([1, 2, 3]) s -= set([0, 1]) # s now equals set([2, 3]) s ^= set([3, 4]) # s now equals set([2, 4])
ชุดสามารถตรึงได้เช่นเดียวกับค่าที่เปลี่ยนแปลงได้ทั้งหมดใน Starlark และเมื่อตรึงแล้ว การดำเนินการทั้งหมดที่ตามมาซึ่งพยายามอัปเดตชุดจะดำเนินการไม่สำเร็จ
สมาชิก
- เพิ่ม
- clear
- difference
- difference_update
- discard
- intersection
- intersection_update
- isdisjoint
- issubset
- issuperset
- pop
- ลบ
- symmetric_difference
- symmetric_difference_update
- union
- update
เพิ่ม
None
set.add(element)
คุณสามารถadd
ค่าที่มีอยู่แล้วในชุดได้ ซึ่งจะไม่ทําให้ชุดค่าเปลี่ยนแปลง
หากต้องการเพิ่มองค์ประกอบหลายรายการลงในชุด ให้ดู update
หรือการดำเนินการกำหนดค่าแบบเพิ่ม |=
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
element
|
required องค์ประกอบที่จะเพิ่ม |
ล้าง
None
set.clear()
ผลต่าง
set set.difference(*others)
หาก s
และ t
เป็นเซต s.difference(t)
จะเท่ากับ s - t
อย่างไรก็ตาม โปรดทราบว่าการดำเนินการ -
กำหนดให้ทั้ง 2 ด้านต้องเป็นเซต ส่วนเมธอด difference
จะยอมรับทั้งลําดับและพจนานุกรมด้วย
คุณสามารถเรียกใช้ difference
ได้โดยไม่มีอาร์กิวเมนต์ ซึ่งจะแสดงสำเนาของชุด
ตัวอย่างเช่น
set([1, 2, 3]).difference([2]) # set([1, 3]) set([1, 2, 3]).difference([0, 1], [3, 4]) # set([2])
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
others
|
required ชุด ลําดับองค์ประกอบที่ทําแฮชได้ หรือพจนานุกรม |
difference_update
None
set.difference_update(*others)
หาก s
และ t
เป็นเซต s.difference_update(t)
จะเทียบเท่ากับ s -= t
อย่างไรก็ตาม โปรดทราบว่าการกําหนดค่าแบบเพิ่ม -=
กำหนดให้ทั้ง 2 ด้านต้องเป็นเซต ส่วนเมธอด difference_update
จะยอมรับลำดับและพจนานุกรมด้วย
คุณสามารถเรียก difference_update
โดยไม่ระบุอาร์กิวเมนต์ได้ ซึ่งจะไม่ทําให้ชุดค่าเปลี่ยนแปลง
ตัวอย่างเช่น
s = set([1, 2, 3, 4]) s.difference_update([2]) # None; s is set([1, 3, 4]) s.difference_update([0, 1], [4, 5]) # None; s is set([3])
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
others
|
required ชุด ลําดับองค์ประกอบที่ทําแฮชได้ หรือพจนานุกรม |
ทิ้ง
None
set.discard(element)
คุณสามารถdiscard
ค่าที่ไม่ได้อยู่ในชุดได้ ซึ่งจะไม่ทำให้ชุดค่าเปลี่ยนแปลง หากต้องการทำให้การพยายามนําองค์ประกอบที่ไม่มีอยู่ออกไม่สําเร็จ ให้ใช้ remove
แทน หากต้องการนำองค์ประกอบหลายรายการออกจากชุด ให้ดู difference_update
หรือการดำเนินการกำหนดแบบเพิ่ม -=
ตัวอย่างเช่น
s = set(["x", "y"]) s.discard("y") # None; s == set(["x"]) s.discard("y") # None; s == set(["x"])
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
element
|
required องค์ประกอบที่จะทิ้ง ต้องแฮชได้ |
อินเตอร์เซกชัน
set set.intersection(*others)
หาก s
และ t
เป็นเซต s.intersection(t)
จะเท่ากับ s & t
อย่างไรก็ตาม โปรดทราบว่าการดำเนินการ &
กำหนดให้ทั้ง 2 ด้านต้องเป็นเซต ส่วนเมธอด intersection
จะยอมรับลำดับและพจนานุกรมด้วย
คุณสามารถเรียกใช้ intersection
ได้โดยไม่มีอาร์กิวเมนต์ ซึ่งจะแสดงสำเนาของชุด
ตัวอย่างเช่น
set([1, 2]).intersection([2, 3]) # set([2]) set([1, 2, 3]).intersection([0, 1], [1, 2]) # set([1])
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
others
|
required ชุด ลําดับองค์ประกอบที่ทําแฮชได้ หรือพจนานุกรม |
intersection_update
None
set.intersection_update(*others)
หาก s
และ t
เป็นเซต s.intersection_update(t)
จะเทียบเท่ากับ s &= t
อย่างไรก็ตาม โปรดทราบว่าการกําหนดค่าแบบเพิ่ม &=
กำหนดให้ทั้ง 2 ด้านต้องเป็นเซต ส่วนเมธอด intersection_update
จะยอมรับลำดับและพจนานุกรมด้วย
คุณสามารถเรียก intersection_update
โดยไม่ระบุอาร์กิวเมนต์ได้ ซึ่งจะไม่ทําให้ชุดค่าเปลี่ยนแปลง
ตัวอย่างเช่น
s = set([1, 2, 3, 4]) s.intersection_update([0, 1, 2]) # None; s is set([1, 2]) s.intersection_update([0, 1], [1, 2]) # None; s is set([1])
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
others
|
required ชุด ลําดับองค์ประกอบที่ทําแฮชได้ หรือพจนานุกรม |
isdisjoint
bool set.isdisjoint(other)
ตัวอย่างเช่น
set([1, 2]).isdisjoint([3, 4]) # True set().isdisjoint(set()) # True set([1, 2]).isdisjoint([2, 3]) # False
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
other
|
required ชุด ลําดับองค์ประกอบที่ทําแฮชได้ หรือพจนานุกรม |
issubset
bool set.issubset(other)
โปรดทราบว่าชุดหนึ่งๆ จะถือเป็นชุดย่อยของตัวเองเสมอ
ตัวอย่างเช่น
set([1, 2]).issubset([1, 2, 3]) # True set([1, 2]).issubset([1, 2]) # True set([1, 2]).issubset([2, 3]) # False
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
other
|
required ชุด ลําดับองค์ประกอบที่ทําแฮชได้ หรือพจนานุกรม |
issuperset
bool set.issuperset(other)
โปรดทราบว่าชุดหนึ่งๆ จะถือเป็นเซตที่ใหญ่กว่าชุดนั้นเสมอ
ตัวอย่างเช่น
set([1, 2, 3]).issuperset([1, 2]) # True set([1, 2, 3]).issuperset([1, 2, 3]) # True set([1, 2, 3]).issuperset([2, 3, 4]) # False
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
other
|
required ชุด ลําดับองค์ประกอบที่ทําแฮชได้ หรือพจนานุกรม |
ป็อป
unknown set.pop()
ดำเนินการไม่สำเร็จหากชุดข้อมูลว่างเปล่า
ตัวอย่างเช่น
s = set([3, 1, 2]) s.pop() # 3; s == set([1, 2]) s.pop() # 1; s == set([2]) s.pop() # 2; s == set() s.pop() # error: empty set
นำข้อมูลออก
None
set.remove(element)
remove
จะดำเนินการไม่สำเร็จหากไม่มีองค์ประกอบนั้นอยู่ในชุด หากไม่ต้องการให้การดำเนินการนำองค์ประกอบที่ไม่มีอยู่ออกล้มเหลว ให้ใช้ discard
แทน
หากต้องการนำองค์ประกอบหลายรายการออกจากชุด ให้ดูที่ difference_update
หรือการดำเนินการกำหนดค่าแบบเพิ่ม -=
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
element
|
required องค์ประกอบที่จะนําออก ต้องเป็นองค์ประกอบของชุด (และสามารถแฮชได้) |
symmetric_difference
set set.symmetric_difference(other)
หาก s
และ t
เป็นเซต s.symmetric_difference(t)
จะเทียบเท่ากับ s ^ t
อย่างไรก็ตาม โปรดทราบว่าการดำเนินการ ^
กำหนดให้ทั้ง 2 ด้านต้องเป็นเซต ส่วนเมธอด symmetric_difference
จะยอมรับลำดับหรือพจนานุกรมด้วย
ตัวอย่างเช่น
set([1, 2]).symmetric_difference([2, 3]) # set([1, 3])
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
other
|
required ชุด ลําดับองค์ประกอบที่ทําแฮชได้ หรือพจนานุกรม |
symmetric_difference_update
None
set.symmetric_difference_update(other)
หาก s
และ t
เป็นชุด s.symmetric_difference_update(t)
จะเทียบเท่ากับ `s ^= t; however, note that the
^=` การกำหนดค่าที่เพิ่มเข้ามากำหนดให้ทั้ง 2 ด้านต้องเป็นชุด ส่วนเมธอด symmetric_difference_update
จะยอมรับลำดับหรือพจนานุกรมด้วย
ตัวอย่างเช่น
s = set([1, 2]) s.symmetric_difference_update([2, 3]) # None; s == set([1, 3])
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
other
|
required ชุด ลําดับองค์ประกอบที่ทําแฮชได้ หรือพจนานุกรม |
Union
set set.union(*others)
หาก s
และ t
เป็นเซต s.union(t)
จะเท่ากับ s | t
อย่างไรก็ตาม โปรดทราบว่าการดำเนินการ |
กำหนดให้ทั้ง 2 ด้านต้องเป็นเซต ส่วนเมธอด union
จะยอมรับทั้งลําดับและพจนานุกรมด้วย
คุณสามารถเรียกใช้ union
โดยไม่ต้องใช้อาร์กิวเมนต์ใดๆ ซึ่งจะแสดงผลสำเนาของชุด
ตัวอย่างเช่น
set([1, 2]).union([2, 3]) # set([1, 2, 3]) set([1, 2]).union([2, 3], {3: "a", 4: "b"}) # set([1, 2, 3, 4])
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
others
|
required ชุด ลําดับองค์ประกอบที่ทําแฮชได้ หรือพจนานุกรม |
อัปเดต
None
set.update(*others)
ตัวอย่างเช่น
s = set() s.update([1, 2]) # None; s is set([1, 2]) s.update([2, 3], [3, 4]) # None; s is set([1, 2, 3, 4])
หาก s
และ t
เป็นเซต s.update(t)
จะเท่ากับ s |= t
อย่างไรก็ตาม โปรดทราบว่าการกําหนดค่าแบบเพิ่ม |=
กำหนดให้ทั้ง 2 ด้านต้องเป็นเซต ส่วนเมธอด update
ยอมรับทั้งลําดับและพจนานุกรมด้วย
คุณสามารถเรียก update
ได้โดยไม่มีอาร์กิวเมนต์ ซึ่งจะไม่ทําให้ชุดค่าเปลี่ยนแปลง
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
others
|
required ชุด ลําดับองค์ประกอบที่ทําแฮชได้ หรือพจนานุกรม |