Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
4 / 4 / 0
Регистрация: 20.07.2018
Сообщений: 280

Заполнение массива

30.09.2024, 13:13. Показов 812. Ответов 9

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня есть два массива. Мне нужно получить третий массив по следующему алгоритму:

1) Записать два элемента из первого массива
2) Записать два элемента из второго массива

И так до конца. Размеры первого массива и второго одинаковы и равны 24.
Меня интересует вопрос - можно ли как то обойтись без циклов, только питоновскими функциями?
Сейчас у меня есть такой код:
Python
1
2
3
4
5
6
7
8
            i, j = 0, 0
            while i < 48:
                array[i] = first[j]
                array[i + 1] = first[j + 1]
                array[i + 2] = second[j]
                array[i + 3] = second[j + 1]
                i = i + 4
                j = j + 2
Пытался сделать так:
Python
1
array = np.column_stack((first, second)).flatten()
Но тут элементы записываются не в том порядке. В этой задаче можно пользоваться numpy
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2024, 13:13
Ответы с готовыми решениями:

Заполнение массива
Будьте добры помогите пожалуйста, бьюсь над реализацией уже несколько часов. Но никак не могу решить. Вот задание: Должно...

Заполнение массива по спирали
Всем привет! Питон начал изучать недавно. Не могу решить задачу. На ввод поступает число n. Требуется в квадрате размером n*n...

Заполнение массива по спирали
Я написал код, но он не проходит два теста в тестирующей системе. Можете, пожалуйста, привести примеры комбинаций чисел, при которых мой...

9
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
30.09.2024, 13:59
Лучший ответ Сообщение было отмечено _lUserl_ как решение

Решение

Python
1
2
3
4
5
6
first = [1, 2, 3, 4, 5, 6]
second = [7, 8, 9, 7, 8, 9]
 
expected = [1, 2, 7, 8, 3, 4, 9, 7, 5, 6, 8, 9]
actual = sum([first[i:i + 2] + second[i:i + 2] for i in range(0, len(first), 2)], [])
assert expected == actual
2
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
30.09.2024, 14:02
- IUserI, вот вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# ((( исходные Списки )))
num = 24  # (число Элементов в исходных Списках)
arr_0 = [i for i in range(num)]
print(arr_0)  # -> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
arr_1 = [num - 1 - i for i in range(num)]
print(arr_1)  # -> [23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
 
# ((( составление результирующего Списка )))
part_num = 2  # (сколько Элементов исходных Списков содержит одна Партия Элементов)
pairs_num = num // part_num  # (число Партий Элементов)
res = []
for p in range(pairs_num):  # по всем Партиям Элементов
    # (индекс начала очередной Партии Элементов)
    p_ind = p * part_num
    # (берем очередную Партию Элементов (1-го исходного Списка))
    res.append(arr_0[p_ind])
    res.append(arr_0[p_ind + 1])
    # (берем очередную Партию Элементов (2-го исходного Списка))
    res.append(arr_1[p_ind])
    res.append(arr_1[p_ind + 1])
 
print(res)  # -> [0, 1, 23, 22, 2, 3, 21, 20, 4, 5, 19, 18, 6, 7, 17, 16, 8, 9, 15, 14, 10, 11, 13, 12,
# 12, 13, 11, 10, 14, 15, 9, 8, 16, 17, 7, 6, 18, 19, 5, 4, 20, 21, 3, 2, 22, 23, 1, 0]
- Наверно все ясно (комментариев больше, чем надо).
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
30.09.2024, 14:16
Цитата Сообщение от _lUserl_ Посмотреть сообщение
можно пользоваться numpy
Python
1
2
3
4
5
6
7
8
import numpy as np
 
f = np.array([1, 2, 3, 4, 5, 6])
s = np.array([7, 8, 9, 7, 8, 9])
 
z = np.reshape(np.concatenate((f.reshape(3, 2), s.reshape(3, 2)), axis=1), 12)
print(z)
# [1 2 7 8 3 4 9 7 5 6 8 9]
Добавлено через 3 минуты
Цитата Сообщение от Staut Посмотреть сообщение
arr_0 = [i for i in range(num)]
Цитата Сообщение от Staut Посмотреть сообщение
arr_1 = [num - 1 - i for i in range(num)]
Python
1
2
lst1 = list(range(24))
lst2 = lst1[::-1]
1
4 / 4 / 0
Регистрация: 20.07.2018
Сообщений: 280
30.09.2024, 15:03  [ТС]
Спасибо за ответы. Можете объяснить что тут делается?
Цитата Сообщение от iSmokeJC Посмотреть сообщение
actual = sum([first[i:i + 2] + second[i:i + 2] for i in range(0, len(first), 2)], [])
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
30.09.2024, 15:08
Python
1
2
3
4
result = []
for i in range(0, len(first), 2):
    result.extend(first[i:i + 2])
    result.extend(second[i:i + 2])
Так понятно?
2
4 / 4 / 0
Регистрация: 20.07.2018
Сообщений: 280
30.09.2024, 15:16  [ТС]
Да, большое спасибо
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
30.09.2024, 17:33
Как вариант:

Python
1
2
3
4
5
6
7
8
9
10
from functools import reduce
 
def cut(lst):
    sz=len(lst)
    return list(map(lambda n: lst[n:n+2],range(0,sz,2)))
    
def foo(lst1,lst2):
    return reduce(lambda q,acc: q+acc,map(lambda x,y: x+y,cut(lst1),cut(lst2)),[])
    
print(foo([1,2,3,4,5,6,7,8],[11,22,33,44,55,66,77,88]))
2
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
30.09.2024, 18:42
Python
1
2
3
a=[3,1,2]
b=[4,5,6]
print(sum([[i,i,j,j] for i,j in zip(a,b)], start=[]))
по-моему, я неверно понял условия..
2
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
30.09.2024, 19:49
- Спасибо iSmokeJC, я хотел как можно ПОСЛЕДОВАТЕЛЬНЕЙ и НАГЛЯДНЕЕ для TC.
Конечно через Срезы и т.д. КОРОЧЕ!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.09.2024, 19:49
Помогаю со студенческими работами здесь

Заполнение массива диагоналями
По данным числам n и m заполните двумерный массив размером n∗m числами от 1 до n∗m “диагоналями”, как показано в примере. Входные...

Заполнение и сортировка массива
Здравствуйте, не могу придумать как решить данную проблему. Пример показан ниже. Я заполнил массив данными о товаре из БД и все данные...

Заполнение двумерного массива
В общем, надо рандомно заполнить двумерный массив размерностью 10х10 нулями и единицами. Желательно с помощью random.randint

Заполнение массива змейкой
Здравствуйте. Вот решаю задачку по созданию и заполнению массива змейкой. В результате должно получится, что-то вроде этого 1 2 3...

Заполнение массива по формуле
Заполнить массив из n элементов по данной формуле. Желательно с коментами..


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru