การจัดเรียงชุดของค่า [ปิด]


112

ฉันมีค่าเช่นนี้:

set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000'])
set(['4.918859000', '0.060758000', '4.917336999', '0.003949999', '0.013945000', '10.281522000', '0.025082999'])  

ฉันต้องการเรียงลำดับค่าในแต่ละsetลำดับที่เพิ่มขึ้น ฉันไม่ต้องการเรียงลำดับระหว่างชุด แต่เป็นค่าในแต่ละชุด


3
สิ่งที่ต้องทำกับปัญหาและคุณได้ลองทำอะไรบ้าง?
Fred Foo

3
ฉันไม่คิดว่าชุด python มีแนวคิดในการสั่งซื้อ สิ่งนี้อาจช่วยคุณได้: stackoverflow.com/questions/1653970/…
zallarak

3
ชุดไม่มีระเบียบ นั่นคือคุณสมบัติอย่างหนึ่ง ในทุกภาษา ใช้list.
Karoly Horvath

4
@KarolyHorvath "ชุดไม่มีระเบียบนั่นคือหนึ่งในคุณสมบัติของมันในทุกภาษา" C ++ ได้std::setรับคำสั่ง
Timothy Shields

17
ทำไมคนถึงปิด (หรือนอกประเด็น) คำถามนี้หลังจากข้อเท็จจริง? ใช่มันจะดีกว่าถ้า OP อธิบายปัญหาของเขาแทนที่จะทำให้เราตกปลาจากเขา แต่ตอนนี้เราทำเสร็จแล้วและแก้ไขคำถามของเขาให้ตรงกันและเขายอมรับคำตอบฉันไม่เห็นว่าการโหวตปิดนั้นสมเหตุสมผลแค่ไหน
ยกเลิก

คำตอบ:


219

จากความคิดเห็น:

ฉันต้องการเรียงลำดับแต่ละชุด

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

>>> s = set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000'])
>>> sorted(s)
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '10.277200999', '4.918560000']

โปรดทราบว่าsortedกำลังให้คุณlistไม่ใช่set. นั่นเป็นเพราะจุดรวมของเซตทั้งในคณิตศาสตร์และเกือบทุกภาษาการเขียนโปรแกรม * คือมันไม่ได้เรียงลำดับ: เซต{1, 2}และ{2, 1}เป็นเซตเดียวกัน


คุณอาจไม่ต้องการจัดเรียงองค์ประกอบเหล่านั้นเป็นสตริง แต่เป็นตัวเลข (ดังนั้น 4.918560000 จะมาก่อน 10.277200999 แทนที่จะเป็นหลัง)

ทางออกที่ดีที่สุดมักจะจัดเก็บตัวเลขเป็นตัวเลขแทนที่จะเป็นสตริงในตอนแรก แต่ถ้าไม่คุณต้องใช้keyฟังก์ชัน:

>>> sorted(s, key=float)
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '4.918560000', '10.277200999']

สำหรับข้อมูลเพิ่มเติมโปรดดูการจัดเรียง HOWTOในเอกสารอย่างเป็นทางการ


* ดูความคิดเห็นสำหรับข้อยกเว้น


1
@TimothyShields: คุณพูดถูกฉันควรจะพูดว่า "ทุกภาษาโปรแกรมที่ไม่ชอบใช้คำทั่วไปในทางที่ผิด" ในภาษาที่ "ไม่ดัดแปลง" หมายถึง "การกลายพันธุ์" จึงไม่น่าแปลกใจที่setหมายถึง "รายการที่จัดเรียง" และคุณต้องบอกว่าunordered_setหมายถึง "ชุด" ...
ยกเลิก

2
ไม่ว่าชื่อนั้นจะดีหรือไม่ดีก็ไม่ได้มีไว้สำหรับการอภิปราย ข้อความที่ว่า "ไม่เคยเรียงลำดับชุดในภาษาใด ๆ " เป็นเท็จ
Timothy Shields

5
คุณจะไม่พบคำว่า "ไม่เรียงลำดับ" ในหน้า Wikipedia เกี่ยวกับชุดทางคณิตศาสตร์ คุณจะไม่พบคำว่า "สั่งซื้อ" นั่นเป็นเพราะมันไม่เกี่ยวข้องกับการดำเนินการทางคณิตศาสตร์ในเซต ไม่ว่าภาษาใดภาษาหนึ่งจะเลือกสร้างชุดตามลำดับคือรายละเอียดการใช้งาน en.wikipedia.org/wiki/Set_( คณิตศาสตร์)
ทิโมธีโล่

3
@TimothyShields: ในขณะเดียวกันหน้าวิกิพีเดียในเซต (คณิตศาสตร์) ที่คุณเชื่อมโยงไม่มีคำว่า "ไม่เรียงลำดับ" เพราะมันชัดเจนอยู่แล้วจากคำจำกัดความ โดยเฉพาะอย่างยิ่ง "ชุด A และ B จะเท่ากันก็ต่อเมื่อมีองค์ประกอบเดียวกันเท่านั้น" ไม่เป็นความจริงสำหรับคอลเลกชันที่สั่งซื้อ (นอกจากนี้ยังมีประโยคเช่น: "ลำดับที่องค์ประกอบของชุดหรือชุดหลายชุดแสดงอยู่นั้นไม่เกี่ยวข้อง" ดังนั้นหากคุณเพิ่งค้นหาต่างกันเล็กน้อยคุณอาจพบว่ามันไม่เข้าใจแนวคิดนี้ด้วยซ้ำ)
abarnert

3
@TimothyShields: แต่std::set จะแสดงการสั่งซื้อ (ไม่ใช่แค่ในรูปแบบที่ชัดเจนผ่าน API เท่านั้นฟังก์ชั่นการสั่งซื้อเป็นส่วนหนึ่งของประเภทของชุดที่กำหนด) ความจริงที่ว่าองค์ประกอบต่างๆมักจะถูกจัดเรียงตามลำดับที่อ่อนแออย่างเข้มงวดเป็นส่วนหนึ่งของคำจำกัดความของแนวคิด ดังนั้นการโต้แย้งของคุณคือการสงสัย แต่ถึงมันจะไม่สำคัญทำไม? ชุดจะไม่เรียงลำดับในเกือบทุกภาษาการเขียนโปรแกรมเช่นเดียวกับในวิชาคณิตศาสตร์ ความจริงที่ว่ามีภาษาอื่นที่ใช้คำนี้เพื่อหมายถึงอย่างอื่นไม่ได้ทำให้คำพูดนั้นเป็นจริงน้อยลง
ยกเลิก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.