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

Сложить элементы из всех списков внутри списка (быстро)

26.01.2022, 16:01. Показов 5096. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Мне нужно очень быстро сложить все элементы из списков внутри списка, процесс выглядит так:

[[[1,2], [3,4,5], [6]], [[7,8], [9], [10]]] --> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

может у библиотеки numpy что-то есть?

Вот мой текущий код:
Python
1
2
3
4
5
6
def sum_list(list_of_lists):
    return_lst = []
    for i in list_of_lists:
        for i2 in i:
            return_lst = return_lst + i2
    return return_lst
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2022, 16:01
Ответы с готовыми решениями:

Заданы несколько списков. Удалить из первого списка все элементы остальных списков
Всем привет, дали такое задание, воспользовался некоторыми кодами в этом форуме, только они не помогли вот один из кодов в форуме,...

условия из двух списков внутри третьего списка
Имеется два списка, необходимо создать третий список из первых двух. Если значения из второго списка меньше числа, то считать по одной...

Заданы три списка. Удалить из первого списка все элементы остальных списков
Помогите пожалуйста, мне нужно сессию досрочно сдать( в роддом надо) а практика только началась, а преподаватель сказал сдать обе задачки...

28
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
26.01.2022, 16:09
Only User, тебе на самом деле нужно линеаризовать сложный список (а не сложить его элементы - если складывать, ответ будет - число 55 )

Python
1
2
3
4
5
6
7
8
9
def linearize(lst):
    if len(lst)==0:
        return []
    elif type(lst[0]) is list:
        return linearize(lst[0])+linearize(lst[1:])
    else:
        return [lst[0]]+linearize(lst[1:])
        
print(linearize([[[1,2], [3,4,5], [6]], [[7,8], [9], [10]]]))
Цитата Сообщение от Only User Посмотреть сообщение
может у библиотеки numpy что-то есть?
- не при чем...
1
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
26.01.2022, 16:24
Python
1
2
3
4
5
6
7
8
9
10
def foo(iterable):
    try:
        result = []
        for x in iterable:
            result.extend(foo(x))
        return result
    except TypeError:
        return [iterable]
        
assert [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] == foo([[[1,2], [3,4,5], [6]], [[7,8], [9], [10]]])
1
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.01.2022, 16:26
Как вариант
Python
1
2
3
4
n = [[[1,2], [3,4,5], [6]], [[7,8], [9], [10]]]
fun = lambda x: str(x).translate(str.maketrans(',', ' ', '[]'))
s = list(map(int, fun(n).split()))
print(s)
5
0 / 0 / 0
Регистрация: 10.11.2021
Сообщений: 16
26.01.2022, 16:38  [ТС]
Gdez,
У вас получилось существенно быстрее, спасибо!
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
26.01.2022, 18:57
Python
1
2
3
4
5
from itertools import chain
 
 
def foo(a):
  return list(chain(*map(chain.from_iterable, a)))
3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
26.01.2022, 19:51
Gdez, отлично! Не сразу понял... Класс!!!
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
26.01.2022, 22:32
Кому делать нечего будет - потестите на скорость
Python
1
2
3
4
import re
 
lst = [[[1, 2], [3, 4, 5], [6]], [[7, 8], [9], [10]]]
print(*map(int, re.findall(r'-?\d+', str(lst))))
2
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
27.01.2022, 00:34
iSmokeJC, translate "победил"
Python
1
2
3
4
5
6
7
8
9
10
11
12
import time
import re
 
lst = [[[1,2], [3,4,5], [6]], [[7,8], [9], [10]]]*500000
 
t1 = time.time()
res = map(int, re.findall(r'-?\d+', str(lst)))
t2 = time.time()
 
res = map(int, str(lst).translate(str.maketrans(',', ' ', '[]')).split())
t3 = time.time()
print(t2-t1, t3-t2)
Исправил - без листов
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
27.01.2022, 00:36
Gdez, ну оно в общем-то и неудивительно )
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,330
27.01.2022, 05:17
Gdez, подскажите, а почему ответ не выводит
Python
1
print(res)
много-много раз пока отрезал))
Python
1
lst = [[[1, 2], [3, 4, 5], [6]], [[7, 8], [9], [10]]] # * 500000
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
27.01.2022, 06:35
Ципихович Эндрю,
подскажите, а почему ответ не выводит
Там код сравнивает два "метода" по времени. Операция принт одинакова для обоих.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,330
27.01.2022, 06:38
Цитата Сообщение от Gdez Посмотреть сообщение
Операция принт одинакова для обоих.
так какая, эта?
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
print(res)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
27.01.2022, 07:45
Ципихович Эндрю, да
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,330
27.01.2022, 07:48
Gdez,
ну так не камильфо
<map object at 0x000002040FC33820>
<map object at 0x000002040FC33CD0>
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
27.01.2022, 07:51
Ципихович Эндрю, тот код -> для оценивания "скорости" алгоритма, не для решения самой задачи...
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,330
27.01.2022, 07:57
*-пожалели?
Python
1
print(*res)
0
enx
 Аватар для enx
1190 / 766 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
27.01.2022, 07:59
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
ну так не камильфо
<map object at 0x000002040FC33820>
<map object at 0x000002040FC33CD0>
пройдись по объекту, что-ли, только терпением запастись нужно
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,330
27.01.2022, 08:01
Цитата Сообщение от enx Посмотреть сообщение
только терпением запастись нужно
я же писал
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
много-много раз пока отрезал))
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
lst = [[[1, 2], [3, 4, 5], [6]], [[7, 8], [9], [10]]] # * 500000
вопросов более не имею спасибо
0
0 / 0 / 0
Регистрация: 10.11.2021
Сообщений: 16
04.02.2022, 15:23  [ТС]
Я нашёл решение
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
import time
 
def sum_list_old(list_of_lists):
    return_lst = []
    for i in list_of_lists:
        for i2 in i:
            return_lst = return_lst+i2
    return return_lst
 
def sum_list(list_of_lists):
    return_lst = []
    for i in list_of_lists:
        for i2 in i:
            return_lst.append(i2)
    return return_lst
 
 
 
lst = [[[1,2], [3,4,5], [6]], [[7,8], [9], [10]]]*5000
 
lt = time.time()
s = sum_list_old(lst)
print("Old",(time.time()-lt)*1000, "мсек.")
 
 
lt = time.time()
s = sum_list(lst)
print("New",(time.time()-lt)*1000, "мсек.")
Code
1
2
Old 1435.95767 мсек.
New 1.302003 мсек.
Сорян... обычный append() оказался самым эффективным способом, а я непонятно что намудрил вначале..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.02.2022, 15:23
Помогаю со студенческими работами здесь

Суммы всех одномерных списков внутри двумерного
Написать функцию sums2d(lst2d: list), которая из двумерного списка будет выдавать одномерный список, содержащий суммы всех одномерных...

Как сложить сумму из чисел сотен списков и узнать количество списков?
Доброго времени суток! Не могу понять как сложить сумму из несколько тысяч списков. Подскажите пожалуйста? В коде удалил из списков все...

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

Как сложить элементы списка?
К примеру имеем список: v={1,2,3,1,1}; Соответственно ответ должен быть равен 8.

Сложить все одинаковые элементы списка
Здравствуйте! есть три массива: name = , price = , number = .Все элементы соответственно расположены относительно друг друга. При...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru