Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815

Инициализация вложенных списков

11.07.2024, 14:57. Показов 910. Ответов 22

Студворк — интернет-сервис помощи студентам
Python
1
2
3
n = 5
a = [[0] * n] * n
a = [[ ??????? ]
нужно с помощью тернарного оператора
в главную диагональ записать цифру 1
Как сразу создать матрицу с 1 по главной диагонали
и 0 по всем остальным , я знаю и это здесь не нужно.
Нужно использовать именно приведенное выше условие
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.07.2024, 14:57
Ответы с готовыми решениями:

Генератор списков(вложенных)
''' Вводится список целых чисел в строку через пробел. С помощью list comprehension сформировать из них двумерный список lst...

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

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

22
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
11.07.2024, 16:48
Цитата Сообщение от ujif Посмотреть сообщение
Нужно использовать именно приведенное выше условие
Не вижу выше ни одного условия
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.07.2024, 16:56
Как-то так, но зачем?

Python
1
2
3
4
5
6
7
8
>>> n = 5
>>> a = [
...     [1 if i == j else 0 for j in range(n)]
... for i in range(n)]
>>> 
>>> a
[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]
>>>
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
11.07.2024, 16:58
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
1 if i == j else 0
Python
1
int(i == j)
Но это не канает, ибо
Цитата Сообщение от ujif Посмотреть сообщение
я знаю и это здесь не нужно
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.07.2024, 17:01
Python
1
2
3
>>> np.eye(2, dtype=int)
array([[1, 0],
       [0, 1]])
2
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
11.07.2024, 18:14  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Не вижу выше ни одного условия
Python
1
2
3
4
[PYTHON]
n = 5
a = [[0] * n] * n
a = [[ ??????? ]
[/PYTHON]
вот это условие

Добавлено через 56 секунд
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Как-то так, но зачем?
как создать сразу , писал, этот код мне известен.
нужно продолжить код который я написал
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
11.07.2024, 18:14
ujif, где тут условие?
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.07.2024, 18:25
Лучший ответ Сообщение было отмечено ujif как решение

Решение

Тогда так, но это ещё тупее:

Python
1
2
3
4
5
6
7
n = 5
a = [[0] * n] * n
a = [
    [1 if i == j else a[i][j] for j in range(len(a[i]))]
for i in range(len(a))
]
print(a)
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
11.07.2024, 18:48  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Тогда так, но это ещё тупее:
именно этот тупой код и был нужен, я пробовал его ,
но без else a[i][j] ничего не получалось и исключить это else , видимо никак
Благодарю за ответ
Некоторым, как мне, нужно давать ответ по уровню, я в пайтоне новичок
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.07.2024, 18:50
Я всё-таки расскажу почему код глупый:
* цикл в цикле, сложность алгоритма О(n^2)
* памяти тратится в два раза больше.

Вот так правильнее:

Python
1
2
for i in range(n):
    a[i][i] = 1
* сложность O(n)
* дополнительная память не выделяется.
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
11.07.2024, 19:06  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Вот так правильнее
я понимаю что так правильнее и что память , что можно было сразу заполнить
весь список правильно, мне нужно было знать наверняка,
что без вот этой части кода else a[i][j] будут ошибки и без него
в данном случает никак
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.07.2024, 19:07
Нет, в моём последнем варианте заполняется не сразу. Сначала все элементы становятся нулями, а потом перезаписываются единицами часть значений.
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
11.07.2024, 19:10  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
a = [
...     [1 if i == j else 0 for j in range(n)]
... for i in range(n)]
я имею в виду что этот код я знаю, заполняет сразу как надо
мне нужно было знать , если список уже создан , там записаны все нули
возможно ли было в тернарном операторе обойтись без else a[i][j]
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.07.2024, 19:13
Лучший ответ Сообщение было отмечено ujif как решение

Решение

Да блин…

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
n = 5
# список создан
# a = [[0] * n] * n
a = [
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
]
 
print(a)
 
for i in range(n):
    a[i][i] = 1
 
print(a)
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
11.07.2024, 19:16  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
for i in range(n):
    a[i][i] = 1
это действительно самое простое, умища моего не хватило для такой простоты
0
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
12.07.2024, 10:12  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
for i in range(n):
    a[i][i] = 1
проблема в том, что в пайтоне этот код заполняет единицами не только главную
диагональ, а все вложенные списки
Python
1
2
3
4
5
6
7
8
9
10
11
for i in range(n):
    a[i][i] = 1
 
for i in a:
    print(j)
 
[1, 1, 1, 1, 1]
[1, 1, 1, 1, 1]
[1, 1, 1, 1, 1]
[1, 1, 1, 1, 1]
[1, 1, 1, 1, 1]
а если в range оставить только одно значение = 0
то заполняются все элементы во всех списках с индексом 0
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
for i in range(1):
    a[i][i] = 1
 
[1, 0, 0, 0, 0]
[1, 0, 0, 0, 0]
[1, 0, 0, 0, 0]
[1, 0, 0, 0, 0]
[1, 0, 0, 0, 0]
 
[[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]]
а если добавлять цифру только по индексу списка a[i]
то списки вообще схлопнутся до одного значения
Python
1
2
3
4
for i in range(n):
    a[i] = 1
 
[[1], [1], [1], [1], [1]]
вот это номер
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
12.07.2024, 14:44
Цитата Сообщение от ujif Посмотреть сообщение
проблема в том, что в пайтоне этот код заполняет единицами не только главную
диагональ, а все вложенные списки
Потому что у вас список неправильно создан. Так работает:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
n = 5
# список создан
# a = [[0] * n] * n
a = [
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
]
 
print(a)
 
for i in range(n):
    a[i][i] = 1
 
print(a)
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
12.07.2024, 16:25  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
a = [
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
]
если это все записать от руки, будет работать правильно, это я понимаю
почему вот этот код a =[[0] * n] * n работает по идиотски в отличие от того ,
что ты ручками распишешь или создашь с помощью генератора
a = [[0 for j in range(n)] for i in range(n)] , меня этот вопрос интересует
и в том и в другом случае, объекты типа list , в обоих случаях одинаковые индексы
ссылаются по id() на одну и ту же ячейку памяти, НО в первом случае, при изменении
значения по индексу элемента в одном списке, изменяются все значения в других списках
с таким же индексом , а в случае с генератором , этого не происходит, вот какой вопрос
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
12.07.2024, 17:04
Лучший ответ Сообщение было отмечено ujif как решение

Решение

Цитата Сообщение от ujif Посмотреть сообщение
в обоих случаях одинаковые индексы
ссылаются по id() на одну и ту же ячейку памяти
Чего???
Python
1
2
3
4
5
6
7
8
9
10
11
n = 5
 
lst1 = [[0] * n] * n
for i in lst1:
    print(id(i))
 
print()
 
lst2 = [[0 for i in range(n)] for _ in range(n)]
for i in lst2:
    print(id(i))
Code
1
2
3
4
5
6
7
8
9
10
11
1807954382720
1807954382720
1807954382720
1807954382720
1807954382720
 
1807954382464
1807954667968
1807954668160
1807954668096
1807954383168
2
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815
13.07.2024, 11:46  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Чего???
Благодарю Уважаемый iSmokeJC вы ответили на все мои вопросы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.07.2024, 11:46
Помогаю со студенческими работами здесь

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

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

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

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

Инициализация списка списков через умножение
Здравствуйте. Делал я задачку тут на форуме, и столкнулся с странной для меня особеностью. Нужно было сделать шахматное поле, и я подумал...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru