รายการเรียงลำดับโครงสร้างข้อมูลหลามตามลำดับตัวอักษร


159

ฉันสับสนเกี่ยวกับโครงสร้างข้อมูลในหลาม (), และ[] {}ฉันพยายามเรียงลำดับรายการอย่างง่ายอาจเป็นเพราะฉันไม่สามารถระบุประเภทของข้อมูลที่ฉันไม่สามารถจัดเรียงได้

รายการของฉันเรียบง่าย: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

คำถามของฉันคือข้อมูลประเภทนี้และวิธีเรียงลำดับคำตามตัวอักษร


หากคุณต้องการเรียงลำดับรายการคุณสามารถใช้ "list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] list.sort () รายการพิมพ์"
kannanrbk

[]ปิดประเภทข้อมูล builtin list(ดูที่tutorialspoint.com/python/python_lists.htm ) รายการเป็นเพียงกลุ่มของค่า (พวกเขาสามารถมีวัตถุอื่น ๆ เช่นรายการซ้อนซ้อน - iterable) ()ล้อมรอบ tuplebuiltin พวกมันไม่เปลี่ยนรูป (ไม่สามารถเปลี่ยนแปลงได้) (ดูที่tutorialspoint.com/python/python_tuples.htm ) และ{}ล้อมรอบตัวdictionaryอาคาร การเปรียบเทียบกับพจนานุกรม (สำหรับคำ) โดยที่ 'คีย์' จะเป็นคำและ 'ค่าของคือคำจำกัดความ (ดูtutorialspoint.com/python/python_dictionary.htm )
Rushy Panchal

คำตอบ:


231

[]หมายถึงรายการ , ()หมายถึงtupleและ{}หมายถึงพจนานุกรม คุณควรดูการสอน Python อย่างเป็นทางการเพราะสิ่งเหล่านี้เป็นพื้นฐานของการเขียนโปรแกรมใน Python

สิ่งที่คุณมีคือรายการของสตริง คุณสามารถจัดเรียงแบบนี้:

In [1]: lst = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

In [2]: sorted(lst)
Out[2]: ['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']

อย่างที่คุณเห็นคำที่ขึ้นต้นด้วยตัวอักษรตัวพิมพ์ใหญ่จะได้รับความพึงพอใจมากกว่าคำที่ขึ้นต้นด้วยตัวอักษรตัวเล็ก หากคุณต้องการจัดเรียงอย่างอิสระให้ทำดังนี้

In [4]: sorted(lst, key=str.lower)
Out[4]: ['constitute', 'Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim']

คุณสามารถเรียงลำดับรายการตามลำดับย้อนหลังได้โดยทำสิ่งนี้:

In [12]: sorted(lst, reverse=True)
Out[12]: ['constitute', 'Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux']

In [13]: sorted(lst, key=str.lower, reverse=True)
Out[13]: ['Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux', 'constitute']

โปรดทราบ:หากคุณทำงานกับ Python 3 strจะเป็นประเภทข้อมูลที่ถูกต้องสำหรับทุกสตริงที่มีข้อความที่มนุษย์อ่านได้ แต่ถ้าคุณยังคงต้องทำงานกับงูหลาม 2 แล้วคุณอาจจัดการกับสตริง Unicode ที่มีชนิดข้อมูลunicodeในหลาม 2 strและไม่ได้ ในกรณีเช่นนี้ถ้าคุณมีรายการของสตริง Unicode คุณต้องเขียนแทนkey=unicode.lowerkey=str.lower


โดยใช้ตัวอย่างที่สองบน pymongo find_one()ผลจากฐานข้อมูล MongoDB, descriptor 'lower' requires a 'str' object but received a 'unicode'ฉันได้รับข้อผิดพลาด: results['keywords'] = sorted(keywords['keywords'], key=str.lower)ผลที่ได้คืออาร์เรย์ของสตริงและดำเนินการเช่นนี้: มีใครรู้วิธีแก้ไขปัญหานี้หรือไม่?
user1063287

@ user1063287 ขออภัยที่ฉันตอบช้า ในกรณีของคุณคุณจะต้องเขียนแทนkey=unicode.lower key=str.lowerนี่เป็นเพราะคุณกำลังจัดการกับสตริง Unicode ไม่ใช่สตริงไบต์ โปรดอ้างอิงUnicode HOWTOอย่างเป็นทางการสำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้โดยเฉพาะอย่างยิ่งสำหรับความแตกต่างระหว่าง Python 2 และ 3
pemistahl

32

Python มีฟังก์ชั่นในตัวที่เรียกว่าsortedซึ่งจะทำให้คุณเรียงลำดับรายการจาก iterable ใด ๆ ที่คุณฟีดมัน (เช่นรายการ ( [1,2,3]); dict ( {1:2,3:4}แม้ว่ามันจะเพียงแค่ส่งกลับรายการเรียงลำดับของคีย์; ชุด ( {1,2,3,4) หรือ tuple ( (1,2,3,4)))

>>> x = [3,2,1]
>>> sorted(x)
[1, 2, 3]
>>> x
[3, 2, 1]

รายการมีsortวิธีการที่จะดำเนินการเรียงลำดับในสถานที่ (x.sort () ส่งคืนไม่มี แต่เปลี่ยนวัตถุ x)

>>> x = [3,2,1]
>>> x.sort()
>>> x
[1, 2, 3]

ทั้งคู่ยังต้องkeyโต้แย้งซึ่งน่าจะเรียกได้ว่า (ฟังก์ชั่น / แลมบ์ดา) คุณสามารถใช้เพื่อเปลี่ยนสิ่งที่จะจัดเรียง
ตัวอย่างเช่นในการรับรายการ(key,value)-pairs จาก dict ซึ่งเรียงลำดับตามค่าคุณสามารถใช้รหัสต่อไปนี้:

>>> x = {3:2,2:1,1:5}
>>> sorted(x.items(), key=lambda kv: kv[1])  # Items returns a list of `(key,value)`-pairs
[(2, 1), (3, 2), (1, 5)]

12

คุณกำลังจัดการกับรายการหลามและการเรียงลำดับนั้นง่ายพอ ๆ กับการทำสิ่งนี้

my_list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']
my_list.sort()


4

ListName.sort()จะเรียงลำดับตามตัวอักษร คุณสามารถเพิ่มreverse=False/Trueในวงเล็บเพื่อย้อนลำดับของรายการ:ListName.sort(reverse=False)


1
นี่เป็นความคิดเห็นสำหรับ Ruby หรือไม่?
allanberry

3
>>> a = ()
>>> type(a)
<type 'tuple'>
>>> a = []
>>> type(a)
<type 'list'>
>>> a = {}
>>> type(a)
<type 'dict'>
>>> a =  ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 
>>> a.sort()
>>> a
['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']
>>> 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.