วิธีแปลงชุดเป็นรายการใน Python

มันคืออะไร

การแปลงชุดเป็นรายการหมายถึงการเปลี่ยนคอลเลกชันที่ไม่ได้เรียงลำดับขององค์ประกอบที่ไม่ซ้ำกันและเป็นไปได้เป็นลำดับที่สั่งซื้อและสามารถจัดทำดัชนีได้ ในทางปฏิบัติคุณจะใช้ชุดและสร้างรายการที่มีองค์ประกอบเดียวกัน

ทำไมมันถึงสำคัญ

ชุดเหมาะสำหรับการทดสอบการเป็นสมาชิกที่รวดเร็วและลบรายการซ้ำ แต่ไม่สนับสนุนการจัดทำดัชนีหรือการหั่น รายการทำ การแปลงช่วยให้คุณ:

  • ดัชนีชิ้นหรือการจัดลำดับองค์ประกอบใหม่
  • เรียงลำดับรายการหรือทำให้เป็นอนุกรมตามลำดับที่เฉพาะเจาะจง
  • ส่งข้อมูลไปยัง API ที่ต้องการรายการ

วิธีใช้

วิธีที่ 1: ใช้รายการ () ตัวสร้าง (โดยตรงมากที่สุด)

ในตัวlist()Constructor ยอมรับการวนซ้ำใด ๆ - รวมถึงชุดและ Frozensets - และส่งคืนรายการใหม่

# Set to list
s = {1, 2, 3, 4}
lst = list(s)
print(lst)     # e.g., [1, 2, 3, 4] (order is arbitrary)

วิธีที่ 2: แกะด้วย [*iterable] (กระชับ)

การเปิดตัวที่นำแสดงโดยจะเปลี่ยนเป็นองค์ประกอบภายในรายการใหม่ตามตัวอักษร การเปิดตัวทั่วไปนี้ระบุไว้ใน PEP 448

s = {1, 2, 3, 4}
lst = [*s]
print(lst)     # e.g., [3, 1, 4, 2]

วิธีที่ 3: สร้างรายการที่เรียงลำดับ

หากคุณต้องการคำสั่งซื้อที่คาดเดาได้ให้ใช้sorted()เพื่อส่งคืนรายการที่จัดเรียงตามลำดับธรรมชาติ องค์ประกอบจะต้องเปรียบเทียบร่วมกัน

แนะนำอ่าน:

s = {10, 2, 7, 3}
lst = sorted(s)
print(lst)     # [2, 3, 7, 10]

วิธีที่ 4: วนซ้ำและผนวก (การควบคุมที่ชัดเจน)

verbose มากขึ้น แต่มีประโยชน์หากคุณต้องการแปลงองค์ประกอบระหว่างการแปลง

s = {1, 2, 3, 4}
lst = []
for x in s:
    lst.append(x * 10)    # example transformation
print(lst)

วิธีที่ 5: จาก Frozenset

Frozensets เป็นชุดที่ไม่เปลี่ยนรูป การแปลงนั้นเหมือนกันกับlist()- ดู Frozenset

fs = frozenset({1, 2, 3})
lst = list(fs)
print(lst)

ข้อ จำกัด และการแลกเปลี่ยน

  • คำสั่งซื้อ: ชุดไม่มีการเรียงลำดับ รายการที่คุณได้รับจากชุดมีลำดับการทำซ้ำโดยพลการ ใช้sorted(s)หากคุณต้องการคำสั่งซื้อที่กำหนด
  • การเปรียบเทียบ:sorted(s)ต้องการองค์ประกอบทั้งหมดที่จะเปรียบเทียบได้ ชนิดผสมเช่น{1, "a"}จะเพิ่มไฟล์TypeErrorเมื่อจัดเรียง
  • ประสิทธิภาพ: การแปลงเป็นเส้นตรงในจำนวนองค์ประกอบ, o (n) สำหรับวิธีการที่ตรงไปตรงมาทั้งหมด (การก่อสร้าง, แกะ, การวนซ้ำ)
  • ความสามารถในการแฮช: วัตถุที่แฮชได้เท่านั้นสามารถอยู่ในชุดได้ หากคุณต้องการรวมรายการที่ไม่สามารถใช้งานได้ (เช่นรายการ) คุณต้องแปลงพวกเขา (เช่นเป็น tuples) ก่อนที่พวกเขาจะอยู่ในชุด

คำถามที่พบบ่อย

Set → List เก็บคำสั่งซื้อเดิมหรือไม่?
ไม่ชุดไม่มีคำสั่งรับประกัน หากคุณต้องการคำสั่งซื้อเฉพาะให้ใช้sorted(s)หรือใช้ฟังก์ชั่นคีย์ของคุณเองด้วยsorted(s, key=...)-

ฉันเห็น "typeerror: 'set' วัตถุไม่สามารถเรียกได้" เกิดอะไรขึ้น
คุณอาจเขียนทับชื่อในตัวsetด้วยตัวแปรจากนั้นลองเรียกมัน เริ่มเชลล์สดหรือลบตัวแปรและหลีกเลี่ยงตัวแปรการตั้งชื่อsetหรือlist-

set = {1, 2}     # bad: shadows the built-in
set([3, 4])      # TypeError

วิธีที่เร็วที่สุดคืออะไร?
สำหรับการแปลงธรรมดาlist(s)และ[*s]มีทั้งความกระชับและ o (n) เลือกทีมของคุณพบว่าอ่านได้มากที่สุด

ฉันจะลบรายการซ้ำออกจากรายการและรักษาคำสั่งซื้อครั้งแรกได้อย่างไร
รูปแบบทั่วไปคือการหักล้างกับคำสั่งซื้อของคีย์จากนั้นแปลงกลับเป็นรายการ:

data = ["a", "b", "a", "c", "b"]
unique_preserving_order = list(dict.fromkeys(data))  # Python 3.7+
print(unique_preserving_order)  # ['a', 'b', 'c']

วิธีการคลาสได้รับการบันทึกไว้ภายใต้dict.fromkeys-

ฉันสามารถแปลงและเรียงลำดับในเวลาเดียวกันได้หรือไม่?
ใช่:sorted(s)ส่งคืนรายการดังนั้นคุณไม่จำเป็นต้องมีตัวสร้างพิเศษ

การอ้างอิงอย่างรวดเร็ว

# Basic conversion
lst = list(s)

# Unpack into a list literal
lst = [*s]

# Sorted list
lst = sorted(s)

# Frozenset to list
lst = list(fs)

# Transform while converting
lst = [func(x) for x in s]

Related Posts