2015-05-19 3 views
0

Привет, я хочу отсортировать список строк accodring в порядке убывания n-граммов.Как отсортировать список строк по n-граммам в python

Пусть следующий мой список

["sedan", "sail sedan", "sail", "price of", "price", "of chevrolet", "of", "chevrolet sail", "chevrolet"] 

Я хочу, чтобы выходной

["price of", "of chevrolet", "chevrolet sail", "sail sedan", "sedan", "sail", "price", "of", "chevrolet"] 

Примечание: Там нет проверки на алфавитном порядке.

+0

Thanx для вас ответ ... последовательность не является проблемой. просто хотите в порядке убывания n-грамма – 3ppps

+0

Не могли бы вы пояснить, что имеется в виду под «порядком по убыванию n-граммов»? Упорядочено по какому критерию, если не позиция в исходном предложении или в алфавитном порядке? Вы просто хотите иметь, например, все 3 грамма, затем 2 грамма, а затем 1 грамм? –

+0

да, я хочу все 3 грамма, затем 2 грамма, а затем 1 грамм – 3ppps

ответ

2

Предполагая, что «по убыванию n-граммов» означает, что вы хотите иметь, например, первый все 3 грамма, затем 2-граммы и т.д., вы можете попробовать это:

>>> ngrams = ["sedan", "sail sedan", "sail", "price of", "price", "of chevrolet", "of", "chevrolet sail", "chevrolet"] 
>>> sorted(ngrams, key=lambda s: len(s.split()), reverse=True) 
['sail sedan', 'price of', 'of chevrolet', 'chevrolet sail', 'sedan', 'sail', 'price', 'of', 'chevrolet'] 

Это использует специальную функцию key, первый split ИНГ строку, а затем с помощью len, чтобы определить количество слов в n-грамме. В качестве альтернативы, вы можете также попробовать count ное количество пробелов в н-грамм:

>>> sorted(ngrams, key=lambda s: s.count(" "), reverse=True)