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

Генераторы,Матрицы

15.02.2020, 18:51. Показов 6294. Ответов 5

Студворк — интернет-сервис помощи студентам
И снова здравствуйте уважаемые программисты. Недавно обращалась к вам за помощью помочь разобраться с программой. Вынуждена снова попросить у вас помощи разобраться с программами по реализации списков. Программы у меня написаны и работают, но я хочу понять, как можно в них применить "Генераторы списков"? Если вас не затруднит, помогите пожалуйста, буду очень благодарна

Ромбы
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
n = int(input())
a = int(-1)
b= int(0)
z = [["0"]*n for j in range(n)]
if n%2 == 1:
    for i in range(n):
        if i <= n//2:
            a+=1
            b = int(0)
            for j in range(n):
                if j < n//2:
                    z[i][j]=a+b
                    b+=1
                elif j >= n//2:
                    z[i][j] = a+b
                    b-=1
        elif i > n//2:
            a-=1
            b = int(0)
            for j in range(n):
                if j < n//2:
                    z[i][j] = a+b
                    b += 1
                elif j >= n//2:
                    z[i][j] = a+b
                    b -= 1
else:
    for i in range(n):
        if i < n//2:
            a+=1
            b = int(0)
            for j in range(n):
                if j <= n//2 - 1:
                    z[i][j] = a+b
                    b += 1
                elif j >= n//2:
                    b-=1
                    z[i][j] = a+b
        elif i >= n//2:
            b = int(0)
            for j in range(n):
                if j <= n//2 - 1:
                    z[i][j] = a+b
                    b += 1
                elif j >= n//2:
                    b-=1
                    z[i][j] = a+b
            a-=1
for row in z:
    print(*row)
Заполнение по диагоналям

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def diagonal_matrix(x,y):
    k = [[] for i in range(x)]
    k[0].append(0)
    mi = min(x, y)
    ma = max(x,y)
    co = int(-1)
    le_main_d = int(ma - (ma-mi))
    for i in range(mi-1):
        k[0].append(k[0][-1] + i+1)
    for i in range(y - x):
        k[0].append(k[0][-1] + x)   
    for i in range(x - y):
        k[0].append(k[0][-1] + (le_main_d-1))
        co += 1
    for i in range((x-1) - (((x-y) > 0) * (x-y))):
        if x < y:
            k[0].append(k[0][-1] + (((le_main_d - i) + co) - (co+1)))
            co += 1
        else:
            k[0].append(k[0][-1] + ((le_main_d - 1) - i))
    for i in range(x-1):
        for j in range(len(k[i])-1):
            k[i+1].append(k[i][j+1] + 1)    
    for i in range(len(k)):
        k[i] = k[i][0:y]
    return(k)
for i in diagonal_matrix(int(input()),int(input())):
    print(*i)
Каждая четвертая диагональ
Python
1
2
3
4
5
6
7
8
9
n = int(input())
a = [[0] * n for i in range(n)]
for i in range(n):
    for j in range(n - 1, -1, -1):
        if abs(n - i - j - 1) % 4 == 0:
            a[i][j] = 1
 
for row in a:
    print(*row)
Змейка

Python
1
2
3
4
n = int(input())
m = int(input())
for j in range(n):
    print(' '.join([str(i + 0+ m * j) for i in range(m)][::pow(-1, j)]))
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2020, 18:51
Ответы с готовыми решениями:

Генераторы
В общем, написал функцию, она создает генератор потока для д итерируемого объекта . Генератор потока должен быть равен исходному потоку...

Генераторы в python
Генераторы в python - это штука, которая не производит вычисления махом, а выдает результаты по требованию. Генераторные функции и...

Генераторы списков
По значениям списка (назовем его X) из первого задания создать новый список Y с помощью генератора списков. Y должен состоять из следующих...

5
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.02.2020, 18:54
Цитата Сообщение от Алена_2001 Посмотреть сообщение
как можно в них применить "Генераторы списков"?
Что такое генератор списка? В python есть list comprehensions и просто генераторы чего угодно.
list comprehensions у вас уже использованы.
2
1 / 1 / 0
Регистрация: 03.02.2020
Сообщений: 25
15.02.2020, 19:05  [ТС]
Значит просто генераторы.
Одну задачу мне с божей помощью удалось реализовать

Python
1
2
3
4
5
n = int(input())
m = int(input())
arr = [[0 if (i+j)%2 else (i*m+j)//2+1 for j in range(m)] for i in range(n)]
for i in arr:
    print(*i)
Добавлено через 3 минуты
Я только начала изучать матрицы, откуда мне знать, что в python есть list comprehensions. Кстати так написано в теме упражнений "Генераторы списков".
https://server.179.ru/tasks/python/2023b/17.html
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.02.2020, 19:10
Цитата Сообщение от Алена_2001 Посмотреть сообщение
Генераторы списков
Неверно написано.
Python
1
[i for i in range(10)]
это и есть list comprehensions. Только никаким генератором он не являются.
list_comprehensions это синтаксический сахар для компактного описания операций обработки списков.
Он есть во многих функциональных языках.
А генераторы в Python это совсем другая штука...
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.02.2020, 19:23
Цитата Сообщение от Garry Galler Посмотреть сообщение
А генераторы в Python это совсем другая штука...
Разве? А если я напишу так (без скобок)?
Python
1
2
3
4
>>> (i for i in range(10))
<generator object <genexpr> at 0x7f8ed66d4a98>
>>> [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.02.2020, 19:40
Лучший ответ Сообщение было отмечено Алена_2001 как решение

Решение

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
А если я напишу так (без скобок)?
Скобки все равно есть. Круглые. Это и будет генератор (в данном виде generator expression). Но не list comprehension.
Это две разные сущности. И у них разный синтаксис и разные объекты на выходе.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.02.2020, 19:40
Помогаю со студенческими работами здесь

Функции Генераторы
Знакомлюсь с функциями генераторами. Времени на усвоение не так уж и много. Хотелось бы увидеть код для решения данной поставленной...

Генераторы списков
По значениям списка (назовем его X) из первого задания создать новый список Y с помощью генератора списков. Y должен состоять из следующих...

Генераторы списков
Небольшой вопрос по теме. Есть код. bookdirs = bs = bs = import os bs = fs = for b in bs: for d,dirs,files in b: ...

Генераторы перестановок
Здравствуйте, прошу помощи в решение задачи такого рода: Вася составляет слова, которые можно назвать набором букв. Состоят они от 3 до 6...

Функции Генераторы
Знакомлюсь с функциями генераторами. Необходимо для работы. Времени на усвоение не так уж и много. Хотелось бы увидеть код для...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[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 и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru