Структура даних Python сортує список за алфавітом


159

Я трохи розгублений щодо структури даних в python; (),, []і {}. Я намагаюся сортувати простий список, ймовірно, оскільки я не можу ідентифікувати тип даних, я не можу його сортувати.

Мій список простий: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

Моє запитання - що це за дані, і як сортувати слова за алфавітом?


Якщо ви хочете сортувати свій список, тоді ви можете використовувати "list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] list.sort () список друку".
kannanrbk

[]додає вбудований тип даних list(див. tutorialspoint.com/python/python_lists.htm ). Списки - це лише групи значень (вони можуть містити інші ітерабельні об'єкти, тобто вкладені списки). ()вкладає вбудований tuple. Вони незмінні (їх неможливо змінити). (див. tutorialspoint.com/python/python_tuples.htm ). І {}вкладає вбудований dictionary. Паралелі зі словником (для слів), де "ключем" було б слово, а "значення" - це визначення. (див. tutorialspoint.com/python/python_dictionary.htm ).
Rushy Panchal

Відповіді:


231

[]позначає список , ()позначає кортеж і {}позначає словник . Слід поглянути на офіційний підручник з 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це правильний тип даних для кожного рядка, що містить текст, прочитаний людиною. Однак, якщо вам все-таки потрібно працювати з Python 2, ви можете мати справу з рядками Unicode, у яких тип даних unicodeу Python 2, а ні str. У такому випадку, якщо у вас є список рядків Unicode, ви повинні написати key=unicode.lowerзамість key=str.lower.


Використовуючи другий приклад на PyMongo find_one()результаті з бази даних MongoDB, я отримую повідомлення про помилку: descriptor 'lower' requires a 'str' object but received a 'unicode'. Результатом є масив рядків і реалізована в такий спосіб: results['keywords'] = sorted(keywords['keywords'], key=str.lower). Хтось знає, як це вирішити?
користувач1063287

@ user1063287 Вибачте за мою пізню відповідь. У вашому випадку вам потрібно писати key=unicode.lowerзамість key=str.lower. Це тому, що ви маєте справу з рядками unicode, а не з байтовими рядками. Будь ласка, зверніться до офіційного Unicode HOWTO для отримання додаткової інформації про це, особливо щодо відповідних відмінностей між Python 2 та 3.
pemistahl

32

У Python є вбудована функція sorted, яка називається , яка надасть вам відсортований список з будь-якого ітерабельного ви його подачі (наприклад, list ( [1,2,3]); dict ( {1:2,3:4}хоча він просто поверне відсортований список клавіш; set ( {1,2,3,4) або кортеж ( (1,2,3,4))).

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

У списках також є sortметод, який буде виконувати сортування на місці (x.sort () повертає None, але змінює об’єкт x).

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

Обидва також беруть keyаргумент, який має бути викликом (функція / лямбда), який ви можете використовувати, щоб змінити те, за чим сортувати.
Наприклад, для отримання списку (key,value)-пар з диктату, відсортованого за значенням, ви можете використовувати наступний код:

>>> 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()

11

Ви можете використовувати вбудовану sortedфункцію.

print sorted(['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'])

4

ListName.sort()сортуватиме його за алфавітом. Ви можете додати reverse=False/Trueв дужки, щоб змінити порядок елементів:ListName.sort(reverse=False)


1
Це коментар для Рубі?
чорниця

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']
>>> 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.