Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Особый статус
 Аватар для Proffessional
743 / 145 / 6
Регистрация: 16.07.2009
Сообщений: 2,185
Записей в блоге: 1

Сконвертировать list с id элементов, в list со значениями для элементов

30.06.2020, 19:59. Показов 1039. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Название темы очень кривое, я не знаю как объяснить проще, но суть проста. Есть вот такой лист:

Python
1
[5,7,8,9]
В нём ID элементов, которым я должен установить значение через func(list). Но этот list для func() должен быть построен по иному принципу. Он содержит значения для всех элементов. То есть для 10 элементов я должен сформировать его примерно так:

Python
1
[0, 0, 0, 0, 0, 1, 0, 1, 1, 1]
5, 7, 8 и 9 id имеют значение 1, остальные 0.

Можно сделать это через луп примерно так:

Python
1
2
for key in list1:
    list2[key] = 1
Но... Это же как-то глупо и неэффективно тратить циклы на такую операцию. Нет ли более элегантных способов конвертации?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.06.2020, 19:59
Ответы с готовыми решениями:

Определить предикат Р(List,Х) который истинен если Х состоит из пар элементов списка List,сумма которых больше половины элементов List
Помогите пожалуйста написать программу,буду очень благодарен,заранее спасибо! Определить предикат Р(List,Х) который истинен если Х...

Добавление строк и элементов в коллекцию для коллекций <List<List<T>
Доброго времени суток , никак не могу добавить строку в коллекцию коллекций . У меня нет определенного количества данных . Могли б...

Инициализация элементов списка списков (List<List>) происходит одинаково для каждого элемента
Доброго времени суток. Не знаю как лучше озаглавить эту тему, но у меня проблема со следующим участком кода: using System; using...

15
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
01.07.2020, 10:01
Python
1
2
3
4
5
6
ls = [5,7,8,9]
 
result = [0] * (max(ls) + 1)
for i in ls:
    result[i] = 1
print(result)
0
Особый статус
 Аватар для Proffessional
743 / 145 / 6
Регистрация: 16.07.2009
Сообщений: 2,185
Записей в блоге: 1
01.07.2020, 17:14  [ТС]
Рыжий Лис, ну да, это как раз моё решение. Но тут приходится крутить for, а значит зря тратить циклы.
А без цикла никак не получится?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
01.07.2020, 17:23
Если вам список не нужен, а только текущий элемент - напишите функцию-генератор. Но внутри опять будет цикл.
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
01.07.2020, 19:10
Цитата Сообщение от Proffessional Посмотреть сообщение
тратить циклы
Цитата Сообщение от Proffessional Посмотреть сообщение
зря тратить циклы
А у вас их какое-то ограниченое количество???
В любом случае чтобы изменить n переменных вам нужно будет сделать n операций
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
02.07.2020, 19:37
Proffessional, без цикла возможно через numpy. Примерно так:
Python
1
2
3
4
import numpy as np
arr = np.zeros(11)
indices = [5,7,9] # для эффективности тут тоже должен быть numpy-массив
arr[indices]=1
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
03.07.2020, 16:22
Ещё можно сэмулировать такой список.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
03.07.2020, 16:31
Цитата Сообщение от Proffessional Посмотреть сообщение
Это же как-то глупо и неэффективно тратить циклы на такую операцию
Еще глупее пытаться заниматься преждевременной оптимизацией.
Вы даже не провели бенчмарка, чтобы понять насколько операция с циклом будет неэффективна для вашего объема данных.
0
Особый статус
 Аватар для Proffessional
743 / 145 / 6
Регистрация: 16.07.2009
Сообщений: 2,185
Записей в блоге: 1
12.07.2020, 17:07  [ТС]
zhurban мне нужно максимально минимизировать их количество
Цитата Сообщение от dondublon Посмотреть сообщение
Ещё можно сэмулировать такой список.
А можно подробнее? Я нашёл только random.sample
Цитата Сообщение от Garry Galler Посмотреть сообщение
Еще глупее пытаться заниматься преждевременной оптимизацией.
Вы даже не провели бенчмарка, чтобы понять насколько операция с циклом будет неэффективна для вашего объема данных.
Нисколько. Я делаю плагин для 3d пакета, он будет исполняться многократно за кадр наряду со множеством других нагрузочных задач, и перебирать он будет огромные куски геометрии по точке, и на каждую точку придётся тратить кучу циклов
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
12.07.2020, 17:11
Цитата Сообщение от Proffessional Посмотреть сообщение
перебирать он будет огромные куски геометрии по точке, и на каждую точку придётся тратить кучу циклов
Тогда нужно было так и обозначать задачу, а не писать псевдокод с псевдоданными.
Вам бы сразу указали на numpy, хотя любому программисту и так понятно, что если имеешь дело с матрицами - имеешь дело с numpy.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
12.07.2020, 17:23
Цитата Сообщение от Proffessional Посмотреть сообщение
и на каждую точку придётся тратить кучу циклов
Написать чистую функцию и закешировать её. Делов-то.
0
Особый статус
 Аватар для Proffessional
743 / 145 / 6
Регистрация: 16.07.2009
Сообщений: 2,185
Записей в блоге: 1
12.07.2020, 17:48  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
хотя любому программисту и так понятно
Там нет возможности подключить стороннюю библиотеку, иначе я бы не задавал такой вопрос
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Написать чистую функцию и закешировать её. Делов-то.
Это появилось только в 3.5, как я понимаю, а работа идёт на 2.7

В общем понятно что без циклов никак
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
12.07.2020, 17:51
Хотя я бы беспокоился насчёт низкой скорости питоновских списков и постоянного выделения памяти.

Правильнее выделить буфер фиксированного объёма и использовать его для хранения результата. Память не выделяется/освобождается - работает быстрее. А если там будет массив - ещё лучше.

Добавлено через 1 минуту
Цитата Сообщение от Proffessional Посмотреть сообщение
а работа идёт на 2.7
Ты задачу-то расскажи, а лучше примеры вводы-вывода покажи. И можно ли импортировать внешние либы.

Кеш имелось ввиду самописный.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
12.07.2020, 17:52
Цитата Сообщение от Proffessional Посмотреть сообщение
Нет возможности подключить стороннюю библиотеку
array.array() Гугли. Это встроенный почти сишный массив.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
12.07.2020, 18:02
Вот и буфер https://docs.python.org/2/library/array.html

Добавлено через 8 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python2
from array import array
 
buf = array('B', [0] * 32)
 
def func(ls):
    n = max(ls)
    for i in range(n):
        buf[i] = 0
    for i in ls:
        buf[i] = 1
    return n
    
print(func([5,7,8,9]))
print(buf)
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
13.07.2020, 11:12
Цитата Сообщение от Proffessional Посмотреть сообщение
А можно подробнее? Я нашёл только random.sample
Посмотрите тут Генераторы
Идея такая же, возможно, чуток подкрутить - вместо словаря внутри - список.
Но если нужно максимальное быстродействие - тогда вам дорога в numpy.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2020, 11:12
Помогаю со студенческими работами здесь

Сконвертировать List<string> в List<class> с фильтром
Дано public class Catalog { public string Code; public string Label; } List&lt;string&gt; oldarr = new...

Как пройтись по Списку List<Point2D> по номерам элементов которые хранятся в List<int>
Есть List&lt;int&gt; в нём хранятся номера массива Есть List&lt;Point2D&gt; .. Вопрос Как пройтись по Списку List&lt;Point2D&gt; по номерам...

Конвертировать один элемент из List<List<Class>> в list и string
Как можно перевести один выбранный элемент из List&lt;List&lt;Data&gt;&gt; myList в list и string? Например, myList. Сейчас я могу с помощью...

Linq преобразование List<List<double>> в List<Array>
Доброго времени суток, данный код нужно преобразовать linq выражениями и дописать выборку из List&lt;List&lt;double&gt;&gt;. Таким...

Работа с List, условие для создания нового List
Всем привет Попал в тупик, есть список с MeshRender объектов, есть список с уникальными Color этих объектов. Нужно составить новый...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru