@ru_python

Страница 5693 из 9768
ваван
14.06.2018
16:58:57
а то я вот так

a=input() def capitalize(string): b=[] i=0 while i<(len(string)): if i==0: b.append(string[i].upper()) elif string[i] == " ": b.append(string[i]) b.append(string[i+1].upper()) i+=2 continue else: b.append(string[i]) i+=1 return (''.join([str(i) for i in b])) print(capitalize(a))

Димон
14.06.2018
16:59:10
" ".join(map(str.capitalize, input().split()))
а какой дефолт у str.split()?

Или там не str?

Google
Димон
14.06.2018
16:59:27
В смысле, дефолт первого аргумента

Tigran
14.06.2018
16:59:27
а какой дефолт у str.split()?
Дефолт - по всем вайтспейсам.

Специальный смысл дефолтного значения None.

Димон
14.06.2018
17:00:24
Ого. Новости)

Tigran
14.06.2018
17:01:18
Вопрос знатокам: может ли "".join, приняв на вход генератор, сгенерировать выходную строку эффективнее, чем sum, не беря list от входного генератора?

Tigran
14.06.2018
17:02:37
Смотря как sum реализован
Как reduce(lambda x, y: x + y, ...).

Denis
14.06.2018
17:02:47
Смотря как + сделан

Tigran
14.06.2018
17:03:03
Как питоний строковый плюс.

Denis
14.06.2018
17:03:04
Для += в cpython оптимизации есть

Tigran
14.06.2018
17:03:26
Denis
14.06.2018
17:03:35
Он работает быстро

Google
Tigran
14.06.2018
17:03:43
sum не может сгенерировать выходную строку :P
Представь, что может) reduce(lambda x, y: x + y, ...)

Valentin
14.06.2018
17:04:27
>>> sum(('a', 'b', 'c')) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str'

:P

Denis
14.06.2018
17:05:06
Представь, что может) reduce(lambda x, y: x + y, ...)
Ну джойнить в сях всяко быстрее, чем питоновскую лямбду звать

Tigran
14.06.2018
17:05:23
>>> sum(('a', 'b', 'c')) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> sum(('a', 'b', 'c'), "") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: sum() can't sum strings [use ''.join(seq) instead]

Димон
14.06.2018
17:05:33
Ну кстати да, нельзя вроде

»> sum(("a", "b", "c"), "") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: sum() can't sum strings [use ''.join(seq) instead]

Denis
14.06.2018
17:05:36
Потому что питон это медленно

Tigran
14.06.2018
17:05:42
Только поэтому?

Димон
14.06.2018
17:05:45
Он даже посказывает)

?
14.06.2018
17:06:04
https://rushter.com/blog/python-gil-thread-scheduling/ ?

Denis
14.06.2018
17:06:19
Если делать тупым плюсом, там переаллокация на каждую строку будет. Джойн может догадаться в 2 раза увеличивать, например

Димон
14.06.2018
17:06:26
Ну джойнить в сях всяко быстрее, чем питоновскую лямбду звать
быстрее, зато корки в питоне пореже вылетают и buffer overflow

Denis
14.06.2018
17:06:43
быстрее, зато корки в питоне пореже вылетают и buffer overflow
У меня ни разу не вылетал ни там, ни там

Denis
14.06.2018
17:07:27
А если через +=, то без разницы, скорее всего

Димон
14.06.2018
17:07:33
У меня ни разу не вылетал ни там, ни там
Ты писал на сях - и у тебя никогда приложение не сваливалось в корку?

Tigran
14.06.2018
17:07:36
Переаллокаций будет так много, что получится квадратичная сложность.

Димон
14.06.2018
17:07:36
Не верю)

Google
Denis
14.06.2018
17:07:47
Tigran
14.06.2018
17:08:04
А если через +=, то без разницы, скорее всего
Это если строка реализована как динамический массив. Что маловероятно.

Димон
14.06.2018
17:08:08
Denis
14.06.2018
17:08:50
Это если строка реализована как динамический массив. Что маловероятно.
>>> s = '' >>> for i in range(1000000): ... s += 'a' это меньше секунды работает

Mark
14.06.2018
17:09:42
Кстати, какой самый быстрый вариант нахождения подстроки?

Denis
14.06.2018
17:09:51
in?

Проксимов
14.06.2018
17:10:00
Mark
14.06.2018
17:10:06
В петоне

Я где-то вычитал, что in хуйня

Проксимов
14.06.2018
17:10:19
В петоне
in наверное

Valentin
14.06.2018
17:10:42
in быстрее, чем find

Димон
14.06.2018
17:10:45
Чот не верится, что хуйня. Непонятно, с чего бы им в cpython пихать для такой базовой вещи что-то не оптимальное

VA
14.06.2018
17:11:01
Я где-то вычитал у Лутца, что in решает половину проблем

Valentin
14.06.2018
17:11:17
https://stackoverflow.com/q/18437798/3606603

Mark
14.06.2018
17:11:20
У in линейная сложность вроде

Проксимов
14.06.2018
17:11:25
В телеге можно редактировать сообщения

VA
14.06.2018
17:11:30
И в 3.х оптимизирована до ужаса

Проксимов
14.06.2018
17:11:38
У in линейная сложность вроде
А ты хочешь подстроку за O(1) искать?

Denis
14.06.2018
17:11:43
Google
Проксимов
14.06.2018
17:11:55
У find тоже
А разве можно лучше?

Denis
14.06.2018
17:12:24
А разве можно лучше?
С предпосчетом можно

Tigran
14.06.2018
17:12:56
С предподсчётом можно и за O(1), если хэши предпосчитаны)

Mark
14.06.2018
17:13:25
Вообще, суть вопроса в скобочной последовательности. Без использования стека. Ща покажу. Постоянно думаю, как это можно оптимизировать

Admin
ERROR: S client not available

Tigran
14.06.2018
17:13:29
Проксимов
14.06.2018
17:13:30
Denis
14.06.2018
17:13:42
А не квадрат?
Квадрат много, хочу меньше

Tigran
14.06.2018
17:13:45
Для всех подстрок строки, в которой ищем, и для строки, которую ищем

Mark
14.06.2018
17:13:57


Вот

Denis
14.06.2018
17:14:01
И это таки не 1, а длина образца

Tigran
14.06.2018
17:14:12
жестоко

Проксимов
14.06.2018
17:14:21
жестоко
Зато прикольно

Tigran
14.06.2018
17:14:26
И это таки не 1, а длина образца
Говорю же, если предпосчитаны.

Denis
14.06.2018
17:14:31
Суфавтомат дает то же самое, но без квадрата памяти и с линейным предпосчетом

Говорю же, если предпосчитаны.
Образец у тебя не бывает предпосчитан

Tigran
14.06.2018
17:14:48
Google
Mark
14.06.2018
17:14:51
Интересно, можно ли его ускорить

Denis
14.06.2018
17:15:06
В питоне бывает!
Тогда можно и позиции предпосчитать сразу

Valentin
14.06.2018
17:15:15
Говорю же, если предпосчитаны.
Вообще интересно узнать кейсы, когда это оправдано ?

Tigran
14.06.2018
17:15:33
Тогда можно и позиции предпосчитать сразу
Ну ладно уж, в питоне со строкой в комплекте часто идёт предпосчитанный хэш.

Tigran
14.06.2018
17:15:59
Зачем он это сохраняет?
Потому что частая операция.

Valentin
14.06.2018
17:16:25
Например, быстрый поиск по большому документу
Ну там индексация всяко как-нибудь умнее делается, чем преподсчет хешей всех подстрок

Denis
14.06.2018
17:16:39
Там суфдерево часто используется

Проксимов
14.06.2018
17:17:09
Я чувствую себя тупым, завязывайте

XD

Mark
14.06.2018
17:17:33
Давайте вернемся к этому алгоритму. Его ускорить можно?

Tigran
14.06.2018
17:17:34
Недавно постили же питонячью магию про строку, у которой увеличивается sys.getsizeof().

Ну там индексация всяко как-нибудь умнее делается, чем преподсчет хешей всех подстрок
Суфдерево, да. Правда, оно находит за О(длина искомой строки), это тебе не О(1) при предпосчитанном хэше!

Mark
14.06.2018
17:18:37
Зачем?
Ради интереса

Страница 5693 из 9768