ประเภทชุดข้อมูลในตัว ชุดคือคอลเล็กชันที่เปลี่ยนแปลงได้และวนซ้ำได้ของค่าที่ไม่ซ้ำกัน ซึ่งเป็นองค์ประกอบของชุด ชื่อประเภทของชุดคือ "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 ชุดเพียงชุดเดียวเท่านั้น แต่ไม่ใช่ทั้ง 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 ชุดข้อมูลสามารถตรึงได้ และเมื่อตรึงแล้ว การดำเนินการต่อๆ ไปทั้งหมดที่พยายามอัปเดตชุดข้อมูลจะล้มเหลว
สมาชิก
- เพิ่ม
- ล้าง
- ความแตกต่าง
- difference_update
- ทิ้ง
- ทางแยก
- intersection_update
- isdisjoint
- issubset
- issuperset
- ป๊อป
- ลบ
- symmetric_difference
- symmetric_difference_update
- union
- อัปเดต
เพิ่ม
None
set.add(element)
คุณสามารถadd
ค่าที่มีอยู่ในชุดอยู่แล้วได้ ซึ่งจะทำให้ชุด
ไม่มีการเปลี่ยนแปลง
หากต้องการเพิ่มองค์ประกอบหลายรายการลงในชุด ให้ดู update
หรือ
การดำเนินการกำหนดค่าเพิ่มเติม |=
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
element
|
ต้องระบุ องค์ประกอบที่จะเพิ่ม |
ล้าง
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
|
ต้องระบุ ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม |
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
|
ต้องระบุ ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม |
ทิ้ง
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
|
ต้องระบุ องค์ประกอบที่จะทิ้ง ต้องแฮชได้ |
อินเตอร์เซกชัน
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
|
ต้องระบุ ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม |
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
|
ต้องระบุ ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม |
isdisjoint
bool set.isdisjoint(other)
ตัวอย่างเช่น
set([1, 2]).isdisjoint([3, 4]) # True set().isdisjoint(set()) # True set([1, 2]).isdisjoint([2, 3]) # False
พารามิเตอร์
พารามิเตอร์ | คำอธิบาย |
---|---|
other
|
ต้องระบุ ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม |
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
|
ต้องระบุ ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม |
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
|
ต้องระบุ ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม |
ป็อป
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
|
ต้องระบุ องค์ประกอบที่จะนำออก ต้องเป็นองค์ประกอบของชุด (และแฮชได้) |
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
|
ต้องระบุ ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม |
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
|
ต้องระบุ ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม |
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
|
ต้องระบุ ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม |
อัปเดต
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
|
ต้องระบุ ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม |