С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
7 / 6 / 1
Регистрация: 31.10.2021
Сообщений: 59

Генератор списков(вложенных)

30.11.2021, 20:18. Показов 6940. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
'''
Вводится список целых чисел в строку через пробел. 
С помощью list comprehension сформировать
 из них двумерный список lst размером N x N (квадратную таблицу чисел).
Гарантируется, что из набора введенных чисел можно
сформировать квадратную матрицу (таблицу).
 
Sample Input:
 
1 2 3 4 5 6 7 8 9
Sample Output:
 
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 
'''
ms = [int(i) for i in input().split()]
lst = [[ms[a] for a in range(len(ms))] for b in range(1, len(ms), 3)]
print(lst)
 
# Не могу догнать как
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.11.2021, 20:18
Ответы с готовыми решениями:

Генератор списков(вложенных) нужна подсказка
''' Вводится натуральное число N. Необходимо сгенерировать вложенный список с помощью list comprehension, размером N x N, где...

Сортировка вложенных списков
В результате работы програмы с вводом получаю список , , , , , , , ]. def get_combination(my_list): comb_list= ...

Формирование вложенных списков Python
Cделать программу: Используя вложенные циклы; используя генераторы списков. Вот мой код, я сделал генератор, его менять нинадо: ...

9
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
30.11.2021, 20:30
Лучший ответ Сообщение было отмечено rcoin как решение

Решение

Python
1
2
3
4
5
s = '1 2 3 4 5 6 7 8 9'
*a, = map(int, s.split())
n = int(len(a) ** .5)
m = [[a[n * i + j] for j in range(n)] for i in range(n)]
print(m)
2
7 / 6 / 1
Регистрация: 31.10.2021
Сообщений: 59
30.11.2021, 20:39  [ТС]
Python
1
2
3
4
'''
Вот в этом выражении .5 что означает?? если не трудно 0.5%? 
n = int(len(a) ** .5)
'''
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
30.11.2021, 20:44
в степени 1/2 или 0.5

Добавлено через 1 минуту
квадратный корень
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
01.12.2021, 00:01
rcoin,
Python
1
2
3
ms = [int(i) for i in input().split()]
lst =[list(x) for x in zip(*[iter(ms)] * 3)]
print(lst)
Вывод:
Python
1
2
1 2 3 4 5 6 7 8 9
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Добавлено через 4 минуты
rcoin, Если Вам понадобится разбивать на внутренние списки другого размера, просто укажите размеры внутренних списков в конце второй строки. В примере выше, это 3.

Добавлено через 2 минуты
Например при 2 выглядит так
Python
1
2
3
ms = [int(i) for i in input().split()]
lst =[list(x) for x in zip(*[iter(ms)] * 2)]
print(lst)
Выводит:
Python
1
2
1 2 3 4 5 6 7 8 9
[[1, 2], [3, 4], [5, 6], [7, 8]]
1
7 / 6 / 1
Регистрация: 31.10.2021
Сообщений: 59
01.12.2021, 16:16  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
lst =[list(x) for x in zip(*[iter(ms)] * 2)]
Спаибо большое у zip большой функционал наверное.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
01.12.2021, 21:03
rcoin, На самом деле здесь дело не в zip, который работает примитивно, формируя кортежи из разных последовательностей беря по одному элементу с соответствующим индексом из каждой последовательности.
А вот как мы из одной последовательности получаем n-ое количество последовательностей, это фокусы, которые мы получаем с помощью iter. Но для того, что бы все это понять, нужно хорошо понимать, как работает iter. Как работает эта инструкция, достаточно сложно для понимания. Я просто показал, что можно и так.
Все таки поясню.
Умножая итератор на три, мы получаем не три итератора, а три обращения к одному и тому же итератору. При каждом обращении к этому итератору, из него берется по одному элементу, следующее обращение берет следующий в итераторе элемент. А так как zip берет по одному элементу из каждого обращения к итератору, к которому он обращается три раза, то и получаем при первом шаге zip кортеж (1, 2, 3) и так далее. А для того, что бы превратить кортежи в списки (как требуется в условии), нужно использовать списковое включение с циклом for. Первая звезда * тоже необходима, так как вторая * возвращает список:
Python
1
[iter(ms)] * 3
Возвращает список из трех итераторов.
Python
1
2
ms = [int(i) for i in input().split()]
print([iter(ms)] * 3)
Выводит:
Python
1
2
1 2 3 4 5 6 7 8 9
[<list_iterator object at 0x000001FC0A712BB0>, <list_iterator object at 0x000001FC0A712BB0>, <list_iterator object at 0x000001FC0A712BB0>]
А нам нужно превратить этот список в аргументы для zip. Поэтому * используется для распаковки списка в аргументы для zip.

Добавлено через 4 минуты
Кстати, обратите внимание, что адрес у всех трех итераторов, один и тот же. Это говорит о том, что при умножении итератора на 3, мы получаем на самом деле не три разных итератора, а три обращения к одному и тому же итератору.
1
7 / 6 / 1
Регистрация: 31.10.2021
Сообщений: 59
02.12.2021, 15:54  [ТС]
Как я понимаю функция iter()
Python
1
2
3
4
5
# создадим список
lst = [1, 2, 3, 4]
# при помощи этой функции переберем элементы это то??
it = iter(lst)
next(it) # возвращает значение из списка  по порядку
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
02.12.2021, 19:04
Цитата Сообщение от rcoin Посмотреть сообщение
next(it) # возвращает значение из списка по порядку
Да.

Добавлено через 3 минуты
rcoin, Хотя правильнее сказать, возвращает элемент из итератора, а не из списка. Просто предварительно мы преобразуем список в итератор, и тогда можем брать оттуда значения по правилам итератора, а не списка.
1
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
03.12.2021, 07:12
Python
1
2
3
4
5
6
s = '1 2 3 4 5 6 7 8 9'
*a, = map(int, s.split())
n = int(len(a) ** .5)
a = iter(a)
m = [[next(a) for _ in range(n)] for _ in range(n)]
print(m)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2021, 07:12
Помогаю со студенческими работами здесь

Обработка двух вложенных списков
Есть два списка: 1. 2. Как вывести индексы второго списка, значения которых отличаются от значений первого списка?

Создайте матрицу (список из вложенных списков) размера N x M
Создайте матрицу (список из вложенных списков) размера N x M (фиксируются в программе), заполненную случайными целыми числами. from...

Удалите из вложенных списков все четные значения элементов
Добрый день! Задачу я вроде решила, но мне кажется, что уж как-то по детски что ли, строк много, и ещё по условию нужно удалить элементы, а...

Генератор списков
Есть список списков, мне нужно создать такой же только заполненный нулями. Как это сделать? a = , , ] b = Попробовал вот так,...

Генератор списков - как создать?
Подскажите, я вот только начал изучать Python и не понимаю - как создать список со значениями, чтобы не вручную заполнять его а программно....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru