ตั้งค่า

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

ประเภทชุดข้อมูลในตัว ชุดคือคอลเล็กชันที่เปลี่ยนแปลงได้และวนซ้ำได้ของค่าที่ไม่ซ้ำกัน ซึ่งเป็นองค์ประกอบของชุด ชื่อประเภทของชุดคือ "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 ชุดข้อมูลสามารถตรึงได้ และเมื่อตรึงแล้ว การดำเนินการต่อๆ ไปทั้งหมดที่พยายามอัปเดตชุดข้อมูลจะล้มเหลว

สมาชิก

เพิ่ม

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 ต้องระบุ
ชุด ลำดับขององค์ประกอบที่แฮชได้ หรือพจนานุกรม