@python_beginnersЭта группа больше не существует

Страница 641 из 1885
Denis
27.10.2016
19:48:22
Если нужно все, наверно, лучше воспользоваться какой-нибудь библиотекой

Темный
27.10.2016
19:48:28
*если они будут в будущем

Zart
27.10.2016
19:48:35
left-pad.io например, ага

Pavel
27.10.2016
19:48:37
т.е. ловить все эти спецсимволы?
Тебе спец символы убрать или оставить только цифры?

Google
Темный
27.10.2016
19:48:46
оставить цифры

в регулярки смотреть?

Pavel
27.10.2016
19:48:56
Правильная постановкп задачи половина решения

Denis
27.10.2016
19:49:42
''.join(i if i.isdigit() else ' ' for i in s )

Zart
27.10.2016
19:49:43
интересно, откуда у них такие наркоманские задачи

Pavel
27.10.2016
19:50:18
Zart
27.10.2016
19:50:23
=_=

Темный
27.10.2016
19:50:25
ага, типа того

я у мамы бизнесмен

''.join(i if i.isdigit() else ' ' for i in s )
спасибо, на первое время это возьму, как нибудь на регулярки заменю

Denis
27.10.2016
19:54:52
Регулярки медленнее будут

Google
Темный
27.10.2016
19:55:32
тут скорость вообще не важна, скрипт парсит некоторое количество товаров раз в n часов

Denis
27.10.2016
19:56:11
А зачем регулярки?

Темный
27.10.2016
19:56:47
потому что модно?)

Kirill
27.10.2016
19:57:05
ребят, помогите # coding: utf-8 import re import os minus_file=open("minus_file.txt","r",encoding="utf-8") minus_fl=minus_file.read() file1=open("in_file.txt","r",encoding="utf-8") file2=file1.read() out_names=open("out_names.txt","w") out1={} def minus_name(minus_word): reg_v=re.findall(('\b(.+?)%s(.+?)\b'%(minus_word)),re.IGNORECASE) reg_vr=re.compile(reg_v) return(reg_vr) def chek_name(): for x in file2: y=re.findall(x,reg_vr) if not y: out1.add(x) else: continue for minus_word in minus_fl: minus_name(str(minus_word)) chek_name() for x in out1: out_names.write(x+"\n") out_file.close() где я ожибся? вылетает TypeError: expected string or bytes-like object

Denis
27.10.2016
19:57:06
Так себе причина

Сейчас нейросети в моде вообще-то

Темный
27.10.2016
19:58:05
Так себе причина
т.е. вариант выше для продакшена вполне ок?

Темный
27.10.2016
19:58:57
??

Zart
27.10.2016
20:21:10
в данном случае компрехеншен будет шустрее

Kirill
27.10.2016
20:23:47
да, нашел спс, строку не показывало

Levent
27.10.2016
20:27:21
С чего стоит начать изучать питон? Знаю немного - основы и типы данных в плюсах и все.

Google
Kill me pls
27.10.2016
20:28:56
НЕ НАСТУПАЙТЕ НА ЗМЕЙКУ!

/dev
27.10.2016
20:46:10
в данном случае компрехеншен будет шустрее
Проверил (Война и Мир, 1 том, utf-8): cpython 2.7.12 323ms (compehension) vs 315 (regex) cpython 3.5.1 240ms (compehension) vs 215 (regex)

это если comprehension = ''.join(c if c.isdigit() else ' ' for c in vim) regex = re.sub('[^\d]', ' ', vim)

Если comprehension = ' '.join(filter(str.isdigit, vim)) regex = re.sub('[^\d]+', ' ', vim) то 174ms vs 19ms с выигрышем для регекспов

Zart
27.10.2016
20:52:23
это если comprehension = ''.join(c if c.isdigit() else ' ' for c in vim) regex = re.sub('[^\d]', ' ', vim)
чота я нихера не понимаю как можно сравнивать разные вещи

результаты выражений же разные

/dev
27.10.2016
20:52:44
нецифры заменены на пробелы в первом случае

во втором — группы нецифр на один пробел

Zart
27.10.2016
20:54:15
а зачем [^\d] если есть \D ?

/dev
27.10.2016
20:54:32
привычка

да, во втором случае я не то для компрехеншенов написал

Zart
27.10.2016
20:56:48
а замерь-ка >>> t = ' '*48+'0123456789'+' '*198 >>> vim.translate(t)

/dev
27.10.2016
20:58:15
169ms (за цикл) по 10 циклам

Zart
27.10.2016
20:58:41
надеюсь ты только транслейт меряешь, без генерации константы каждый раз?

/dev
27.10.2016
20:58:57
да

Zart
27.10.2016
20:59:15
думаю шустрее транслейта уже не выйдет

Andrey
27.10.2016
20:59:45
Хотя она достаточно простая

Zart
27.10.2016
21:00:16
разницы почти не будет скорее всего, так как там кэш

Google
/dev
27.10.2016
21:02:34
Тогда и регулярку надо скомпилированную мерять
тот же результат. А [\D] работает 14ms против 19ms у`[^\d]`

Zart
27.10.2016
21:02:52
просто \D

без []

/dev
27.10.2016
21:03:35
так же

Andrey
27.10.2016
21:08:35
тот же результат. А [\D] работает 14ms против 19ms у`[^\d]`
Судя по коду, ^ всегда добавляет лишний опкод для отрицания, а не инвертирует набор символов

Это в sre_compile.py, optimize_charset

/dev
27.10.2016
21:11:51
Можно и строку на чанки бить начать и тредам выдавать, затем собирать. За инвалидацией кешей следить, до NUMA добраться. Интересно, до какого предела кто '\D' оптимизировал.

Admin
ERROR: S client not available

Andrey
27.10.2016
21:17:05
Kirill
27.10.2016
22:19:31
подстакажите, как в регулярное выражение добавить переменную?

b0g3r
27.10.2016
22:19:49
в каком смысле

Kirill
27.10.2016
22:22:36
кароч мне надо из файла с никами сохранить только те, которые не содержать в себе слов из файла со стоп словами... def minus_name(minus_word): reg_v='(.+?)%s(.+?)\s'%(minus_word) reg_vr=re.compile(reg_v) return(reg_vr) типа этого, только чтобы работало

b0g3r
27.10.2016
22:22:54
а зачем это делать регулярками?

Kirill
27.10.2016
22:23:08
а чем?

если есть способ проще, я с удовольствием им воспользуюсь

=)

b0g3r
27.10.2016
22:25:46
for el in stop_words: for nick in nicks: if nick.contains(el): pass

только el заменить на какое-нибудь более логичное название, которое я не придумал

вместо pass - удалять никнейм из списка

Kirill
27.10.2016
22:27:08
?

Google
Kirill
27.10.2016
22:28:01
а я уже 2 часа с регулярками карячусь =)

b0g3r
27.10.2016
22:29:09
единственное - нужно как-то придумать как удалять из списка значения чтобы не ломать цикл for

Kirill
27.10.2016
22:30:01
добавлять в другой список те что нужны

b0g3r
27.10.2016
22:30:39
тогда наоборот - первый цикл по никам, второй по стоп-словам

можно сделать с помощью for else

for nick in nicks: for el in stop_words: if nick.contains(el): break else: clear_nicks.append(nick)

else после for сработает только если for завершится без вызова break, т.е. если for переберет все элементы

а он переберет все элементы стоп-листа если ни одно из них не встречается в нике

Kirill
27.10.2016
22:34:38
?

спс

b0g3r
27.10.2016
22:34:52
что-то непонятно?

Kirill
27.10.2016
22:35:23
понятно

осталось переписать

b0g3r
27.10.2016
22:37:27
можно вынести это в отдельную функцию: def validate(nick): for el in stop_words: if nick.contains(el): return False return True

for nick in nicks: if validate(nick): clear_nicks.append(nick)

Kirill
27.10.2016
22:49:01
.contains - это из какого модуля? мне пишет что нет такого атрибута у строки.

утро вечера мудренее короче

b0g3r
27.10.2016
23:07:16
так, я соснуле

if el in nick:

Leonid
27.10.2016
23:08:12
так, я соснуле
это из php что ли?

Страница 641 из 1885

Эта группа больше не существует Эта группа больше не существует