Как обрезать массив python
Перейти к содержимому

Как обрезать массив python

  • автор:

Как обрезать распакованный список списков до определенной длины? [дубликат]

В данной программе выводится последовательность чисел, которые повторяются столько раз сколько равны. Нужно обрезать ее до числа n. Пример, если n = 6, то последовательность должна выводиться: 1 2 2 3 3 3 Но у меня никак не выходит обрезать до этого числа

Отслеживать
задан 14 янв 2022 в 16:42
35 10 10 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

n = int(input()) lst = [] i = 1 # для создания группы из i элементов, равных i while len(lst) < n: lst.extend([i] * i) i += 1 print(lst[:n]) 

Отслеживать
ответ дан 14 янв 2022 в 17:01
3,933 4 4 золотых знака 10 10 серебряных знаков 22 22 бронзовых знака

Тут два вопроса: как генерировать нужную вам последовательность чисел? Как из этой последовательности выделить кусок нужной длины?

import itertools # последовательность 1 2 2 3 3 3 4 4 4 4 . def gen(): for i in itertools.count(start=1): yield from itertools.repeat(i, i) # отрезаем первые n членов n = int(input()) print(*itertools.islice(gen(), n)) 

Если вы не хотите пользоваться itertools , то всё можно сделать вручную:

def gen(): j = 1 while True: for _ in range(j): yield j j += 1 def slice(seq, n): i = 0 for j in seq: if i == n: break yield j i += 1 n = int(input()) print(*slice(gen(), n)) 

Или можно всё собрать в кучу:

def gen(n): i = 0 j = 1 while True: for _ in range(j): if i == n: return yield j i += 1 j += 1 n = int(input()) print(*gen(n)) 

Как обрезать массив с обеих сторон в AHK?

Написал немого не то, что нужно, а исправить не получается.
Есть скрип, который режет строку по символу и выводит три элемента после второго, Но суть в том, что заранее неизвестно сколько элементов будет в середине, но известно, что всегда нужно убирать два спереди и три в конце.
То есть на питоне, к примеру, это выглядело бы так list[2:-3].
Вот код. подскажете, как переделать?
Строка пример: 1_2_3_4_5_6_7_8_9_10 => результат 3-4-5-6-7
str := Clipboard
strArr := StrSplit(str, "_")
new = % strArr[3] "-" strArr[4] "-" strArr[5] "-" strArr[6] "-" strArr[7]
Clipboard := new
return

  • Вопрос задан 11 сент. 2023
  • 38 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 1
Не ИТ-специалист

И что сложного в этом общеалгоритмическом вопросе: вы не можете в цикле пройтись по массиву, вам на каждый чих нужна особая функция?

Ну, вызовите тогда для массива дважды метод RemoveAt (для удаления с конца при этом, вероятно, ещё потребуется использовать метод Length ).

Ответ написан 11 сент. 2023
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

автоматизация

  • Автоматизация
  • +1 ещё

Существуют ли аналоги AHK с нормальным диалектом?

  • 1 подписчик
  • 19 часов назад
  • 19 просмотров

Как обрезать список в Python

Мне нужны первые 5 элементов. Если он имеет менее 5 элементов.

[4,76,2,8,6] 

Как это сделать?

TIMEX 08 окт. 2009, в 02:39

Поделиться

Смотрите также: stackoverflow.com/questions/509211/…

Greg Hewgill 08 окт. 2009, в 00:25

Поделиться:

4 ответа

Лучший ответ

Вы просто субиндексируете его с помощью [:5] , указывающего, что вы хотите (до) первых 5 элементов.

>>> [1,2,3,4,5,6,7,8][:5] [1, 2, 3, 4, 5] >>> [1,2,3][:5] [1, 2, 3] >>> x = [6,7,8,9,10,11,12] >>> x[:5] [6, 7, 8, 9, 10] 

Кроме того, если положить двоеточие справа от числа означает подсчет с n-го элемента вперед - не забывайте, что списки основаны на 0!

>>> x[5:] [11, 12] 

Mark Rushakoff 08 окт. 2009, в 01:23

Индексы, срезы и итеративный обход — Python: Numpy-массивы

Массивы данных в Python можно разделить на два типа по наличию или отсутствию порядка элементов. Например:

  • Множество set или словарь dict относятся к неупорядоченным данным — не удастся обойти их по индексу
  • Зато такая возможность есть со списком list или кортежем tuple — у их элементов индексы есть

Для массивов numpy.ndarray порядок элементов важен, потому что он помогает ускорить обработку данных. Его индексация похожа на индексацию списка list . В этом уроке подробнее разберем эту тему, а также поговорим о правилах и методах работы с индексами массивов numpy.ndarray .

Правила индексирования массивов

Возьмем пример из прошлого урока и добавим к нему чуть больше данных:

# Импорт библиотеки numpy с псевдонимом np import numpy as np # Создание списка языка Python numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Конвертация созданного списка в массив Numpy numpy_numbers = np.array(numbers) # Тип созданного объекта numbers print(type(numbers)) # => # Тип созданного объекта numpy_numbers print(type(numpy_numbers)) # => 

Получим элемент массива numpy.ndarray . Здесь принцип такой же, как с получением элемента списка:

# Получение элемента по индексу из списка print(numbers[2]) # => 2 # Получение элемента по индексу из numpy.ndarray print(numpy_numbers[2]) # => 2 

Отрицательные целые значения также применимы к индексации массивов numpy.ndarray :

# Получение элемента по отрицательному индексу из списка print(numbers[-1]) # => 9 # Получение элемента по отрицательному индексу из numpy.ndarray print(numpy_numbers[-1]) # => 9 

В многомерном случае делается все по аналогии:

# Создание списка списков numbers_lists = [ [0, 1, 2,], [3, 4, 5,], [6, 7, 8,], [9, 10, 11] ] # Конвертация созданного списка списков в массив Numpy numpy_numbers_lists = np.array(numbers_lists) # Получение элемента по индексу из списка print(numbers_lists[2][1]) # => 7 # Получение элемента по индексу из numpy.ndarray print(numpy_numbers_lists[2][1]) # => 7 # Получение элемента по индексу из numpy.ndarray # Более предпочтительный способ print(numpy_numbers_lists[2,1]) # => 7 

Выше мы рассмотрели два способа получения элементов массива. Лучше всего использовать последний, потому что он выполняется за меньшее время. Причины станут ясны дальше, после знакомства с операцией среза.

Операции среза данных

Операция среза — это удобный и распространенный способ получить некоторое подмножество элементов, идущих подряд. Срез помогает сократить время выполнения подвыборки за счет того, что не нужно использовать циклы:

Рассмотрим примеры срезов:

# Создание списка языка Python numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Конвертация созданного списка в массив Numpy numpy_numbers = np.array(numbers) # Срезы # Первые элементы списка print(numpy_numbers[:4]) # => [0 1 2 3] # Середина print(numpy_numbers[2:5]) # => [2 3 4] # Последние элементы списка print(numpy_numbers[-3:]) # => [7 8 9] 

Срезы многомерных массивов упрощают операции со списками:

# Создание списка списков numbers_lists = [ [0, 1, 2,], [3, 4, 5,], [6, 7, 8,], [9, 10, 11] ] # Конвертация созданного списка списков в массив Numpy numpy_numbers_lists = np.array(numbers_lists) # Вырезание элементов из numpy.ndarray print(numpy_numbers_lists[:2,:2]) # => [[0 1] # [3 4]] # Попытка вырезать те же элементы из списка print(numbers_lists[:2][:2]) # => [[0, 1, 2], [3, 4, 5]] # Решение для вырезания элементов из списка print([row[:2] for row in numbers_lists[:2]]) # => [[0, 1], [3, 4]] 

В примере выше мы вырезали элементы из верхнего левого квадрата исходной таблицы размером 2x2. Чтобы решить такую задачу с помощью списков, нужно было бы писать дополнительный код, тратить больше времени и сил.

Еще одна востребованная операция с многомерными массивами — получение строк и столбцов значений. Снова используем срезы массива numpy.ndarray и реализуем задачу таким образом:

# Создание списка списков numbers_lists = [ [0, 1, 2,], [3, 4, 5,], [6, 7, 8,], [9, 10, 11] ] # Конвертация созданного списка списков в массив Numpy numpy_numbers_lists = np.array(numbers_lists) # Вырезание 0 строки из numpy.ndarray print(numpy_numbers_lists[0,:]) # => [0 1 2] # Вырезание 0 строки — еще один способ print(numpy_numbers_lists[0]) # => [0 1 2] # Вырезание 1 столбца из numpy.ndarray print(numpy_numbers_lists[:,1]) # => [ 1 4 7 10] 

Итеративный обход

Как мы говорили выше, в работе с массивами лучше не пользоваться циклами. Если есть возможность, лучше обходить элементы в нужном порядке с возможным периодическим пропуском элементов — так мы экономим время выполнения:

# Создание списка языка Python numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Конвертация созданного списка в массив Numpy numpy_numbers = np.array(numbers) # Четные элементы массива print(numpy_numbers[::2]) # => [0 2 4 6 8] # Обратный порядок элементов массива print(numpy_numbers[::-1]) # => [9 8 7 6 5 4 3 2 1 0] 

Знак шага указывает на порядок обхода: плюс говорит о восходящем порядке обхода индексов, минус — об обратном. Значение шага задает период обхода. Аналогичный синтаксис применим и для многомерных массивов:

# Создание списка списков numbers_lists = [ [0, 1, 2,], [3, 4, 5,], [6, 7, 8,], [9, 10, 11] ] # Конвертация созданного списка списков в массив Numpy numpy_numbers_lists = np.array(numbers_lists) # Перестановка строк в обратном порядке print(numpy_numbers_lists[::-1]) # => [[ 9 10 11] # [ 6 7 8] # [ 3 4 5] # [ 0 1 2]] # Четные столбцы print(numpy_numbers_lists[. 2]) # => [[ 0 2] # [ 3 5] # [ 6 8] # [ 9 11]] 

Закрепим знания на практике

Воспользуемся недельными данными по продажам сети магазинов:

День Магазин №1 Магазин №2 Магазин №3 Магазин №4
ПН 7 1 7 8
ВТ 4 2 4 5
СР 3 5 2 3
ЧТ 8 12 8 7
ПТ 15 11 13 9
СБ 21 18 17 21
ВС 25 16 25 17

Подготовим данные для решения задач:

# Импортируем библиотеку numpy с псевдонимом np import numpy as np # Создаем «лист листов» продаж orders_values = [ [7, 1, 7, 8], [4, 2, 4, 5], [3, 5, 2, 3], [8, 12, 8, 7], [15, 11, 13, 9], [21, 18, 17, 21], [25, 16, 25, 17] ] # Конвертируем созданный «лист листов» в массив Numpy orders = np.array(orders_values) 

А теперь пошагово выполним три задачи.

Задача 1. Оставить только первые два магазина:

# Оставляем только первые два магазина print(orders[. 2]) # => [[ 7, 1], # [ 4, 2], # [ 3, 5], # [ 8, 12], # [15, 11], # [21, 18], # [25, 16]] 

Задача 2. Оставить в рассмотрении данные продаж за выходные дни:

# Оставляем в рассмотрении данные продаж за выходные дни print(orders[-2:]) # => [[21, 18, 17, 21], # [25, 16, 25, 17]] 

Задача 3. Сделать обратный порядок дней в таблице:

# Делаем обратный порядок дней в таблице print(orders[::-1]) # => [[25, 16, 25, 17], # [21, 18, 17, 21], # [15, 11, 13, 9], # [8, 12, 8, 7], # [3, 5, 2, 3], # [4, 2, 4, 5], # [7, 1, 7, 8]] 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *