Size: a a a

Сообщество Python Программистов

2021 June 21

T

Tuum Daemonia in Сообщество Python Программистов
кинь код текстом
источник

ЯЛ

Ярослав Лазарев... in Сообщество Python Программистов
from timeit import timeit
from itertools import chain


def insert_separator(old, sep):
   items_count = len(old)
   separators = (sep for _ in range(items_count))
   result = []
   for i, s in zip(old, separators):
       result.append(i)
       result.append(s)
   return result[:-1]


def foo(lst, sep):
   res = []
   for i in lst:
       res += [i, sep]
   return res[:-1]


source = [1, 2, 3]
sep = None
N = len(source)

first = lambda: list(sum(zip(source, [sep]*N), tuple()))[:-1]
second = lambda: sum([[x, None] for x in source], list())[:-1]
third = lambda: list(chain(*([x, None] for x in source)))[:-1]
fourth = lambda: insert_separator(source, sep)
fifth = lambda: foo(source, sep)

print(timeit(first, number=10_000_000))
print(timeit(second, number=10_000_000))
print(timeit(third, number=10_000_000))
print(timeit(fourth, number=10_000_000))
print(timeit(fifth, number=10_000_000))

print(first())
print(second())
print(third())
print(fourth())
print(fifth())
источник

А

Айван in Сообщество Python Программистов
def separate(arr, sep):
 return list(itertools.chain(*zip(arr, [sep] * len(arr))))[:-1]
источник

a

abc in Сообщество Python Программистов
А за что, если нет скорости и читаемости?
источник

ЯЛ

Ярослав Лазарев... in Сообщество Python Программистов
Щас и вас пощитаем.
источник

R3

Rud 356 in Сообщество Python Программистов
сысле нет читаемости?
источник

T

Tuum Daemonia in Сообщество Python Программистов
я просто удивлен, что мой код ровно в 4 раза быстрее выполняется
источник

T

Tuum Daemonia in Сообщество Python Программистов
а так да
источник

T

Tuum Daemonia in Сообщество Python Программистов
в плане не мой код, а мой питон выполняет*
источник

А

Айван in Сообщество Python Программистов
Кстати, как тут лучше всего вернуть генератор без последнего элемента?
Думал сделать что-то вроде
return itertools.chain(*zip(arr, [sep] * len(arr)))[:-1]
И вызывать list(separate(arr, sep))
источник

R3

Rud 356 in Сообщество Python Программистов
тут пахнет какой-то хуйней
источник

R3

Rud 356 in Сообщество Python Программистов
уменьшил в 10 раз количество прогонов, а тут это
источник

R3

Rud 356 in Сообщество Python Программистов
1.8584743000000001
2.5841283999999995
16.8918254
20.1250147
2.4605135999999987
источник

А

Айван in Сообщество Python Программистов
Если что, результат может сильно отличаться при большем размере массива
источник

in Сообщество Python Программистов
источник

in Сообщество Python Программистов
ржу, когда руд залетает в чат
источник

ЯЛ

Ярослав Лазарев... in Сообщество Python Программистов
Результат предпоследний (а в списке последний)

sixth = lambda: separate(source, sep)

17.196906853
17.679335793
23.675172630999995
37.626074392
12.127818505999997
24.078679207999997
источник

R3

Rud 356 in Сообщество Python Программистов
я достаю из широких штанин cprofile
источник

R3

Rud 356 in Сообщество Python Программистов
это раз
источник

T

Tuum Daemonia in Сообщество Python Программистов
у меня такого нет
источник