37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 815

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

11.07.2024, 14:57. Показов 943. Ответов 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): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru