Я пытаюсь получить длину значений массива состояний в отдельный массив, а затем отсортировать их в порядке убывания, но у меня возникают проблемы с получением всех значений длины строки в массив, вместо того, чтобы иметь одно значение после итерация.
states = ["Abia", "Adamawa", "Anambra", "Akwa Ibom", "Bauchi", "Bayelsa", "Benue", "Borno", "Cross River", "Delta", "Ebonyi", "Enugu", "Edo", "Ekiti", "Gombe", "Imo", "Jigawa", "Kaduna", "Kano", "Katsina", "Kebbi", "Kogi", "Kwara", "Lagos", "Nasarawa", "Niger", "Ogun", "Ondo", "Osun", "Oyo", "Plateau", "Rivers", "Sokoto", "Taraba", "Yobe", "Zamfara"]
for i in states:
a = [len(i)]
print(a)
4 ответа
Поскольку вы хотите, чтобы длины были отсортированы в порядке убывания, используйте sorted
с reverse=True
и составьте список
states = ["Abia", "Adamawa", "Anambra", "Akwa Ibom", "Bauchi", "Bayelsa", "Benue", "Borno", "Cross River", "Delta", "Ebonyi", "Enugu", "Edo", "Ekiti", "Gombe", "Imo", "Jigawa", "Kaduna", "Kano", "Katsina", "Kebbi", "Kogi", "Kwara", "Lagos", "Nasarawa", "Niger", "Ogun", "Ondo", "Osun", "Oyo", "Plateau", "Rivers", "Sokoto", "Taraba", "Yobe", "Zamfara"]
a = sorted([len(i) for i in states], reverse=True)
print (a)
Вывод
[11, 9, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3]
Чтобы получить индексы отсортированного списка без обращения к массивам NumPy
, есть много способов: см. здесь. Я лично предпочитаю напрямую использовать NumPy
argsort
. Как следует из названия, он возвращает массив индексов, соответствующих отсортированному массиву / списку в порядке возрастания. Чтобы получить индексы в порядке убывания, вы можете просто перевернуть массив, возвращенный argsort
, используя [::-1]
. Следующее решение вашей проблемы:
import numpy as np
states = ["Abia", "Adamawa", "Anambra", "Akwa Ibom", "Bauchi", "Bayelsa", "Benue", "Borno", "Cross River", "Delta", "Ebonyi", "Enugu", "Edo", "Ekiti", "Gombe", "Imo", "Jigawa", "Kaduna", "Kano", "Katsina", "Kebbi", "Kogi", "Kwara", "Lagos", "Nasarawa", "Niger", "Ogun", "Ondo", "Osun", "Oyo", "Plateau", "Rivers", "Sokoto", "Taraba", "Yobe", "Zamfara"]
a = [len(i) for i in states]
indices_sorted = np.argsort(a)[::-1] # [::-1] gives you indices for decreasing order
Вывод
array([ 8, 3, 24, 35, 19, 1, 2, 30, 5, 4, 10, 16, 17, 33, 32, 31, 22,
13, 6, 7, 9, 11, 14, 25, 23, 20, 21, 26, 27, 34, 28, 18, 0, 12,
15, 29])
Теперь, как вы можете видеть, первый индекс в вышеприведенном выводе - это 8
, что означает 9-й элемент states
, то есть Cross River
. Точно так же вы можете получить доступ и проверить другие элементы.
Через генератор:
lens = [len(a) for a in states]
Вы также можете сделать это, используя map
без используя цикл for
:
a = list(map(len,states))
Вы можете использовать понимание списка:
lengths = [len(state) for state in states]
Если вам нужно использовать цикл for, создайте список и добавьте к нему:
lengths = []
for i in states:
lengths.append(len(i))
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.