
Agent
28.12.2016
19:30:03
Как часики)

Maksim
28.12.2016
19:50:31
как вернуть все ссылки с имиджами?
from bs4 import BeautifulSoup
import requests
html=('<html><body><img src="test.jpg">\n''<p>Some text\n''<img SRC=\'well.png\'>\n''</p></body></html>')
soup = BeautifulSoup(html, "html.parser")
print(soup)
result = soup.findAll('img src=')[:].get_text()
print(result)
img scr=
*src

Google

Johnnie
28.12.2016
20:03:38
@bladdon @zartsoft
t1: 1332.5145938309997
t2: 808.875277266
t3: 134.11211553499925
:)
list_len = 300
min_num, max_num = 1, 50
repeats = 3

Denis
28.12.2016
20:03:56
t3 это кто?

Johnnie
28.12.2016
20:04:09
это твое

Denis
28.12.2016
20:04:29
1000000 сделай

Johnnie
28.12.2016
20:04:51
[False, True, False, True] should equal [20, 37, 21]
эээ, стоп

Zart
28.12.2016
20:06:49
ну я писал навскидку

Johnnie
28.12.2016
20:10:13
а можешь не навскидку?
я чето не вкурю как тут

Google

Johnnie
28.12.2016
20:10:22
хочу запустить большой тест)

Zart
28.12.2016
20:14:02
>>> import collections
>>> order, max_e = [1, 2, 3, 1, 2, 3, 3, 3], 2
>>> c = collections.Counter(order)
>>> list(filter({k for k, v in c.items() if v <= max_e}.__contains__, order))
[1, 2, 1, 2]
перепутал фильтр с мапом

Johnnie
28.12.2016
20:14:53
Test.assert_equals(delete_nth([20,37,20,21], 1), [20,37,21])
[37, 21] should equal [20, 37, 21]

Igor
28.12.2016
20:17:56
This code finds all tags whose id attribute has a value, regardless of what the value is:
soup.find_all(id=True)
...: images = soup.findAll('img', src=True)
...:
In [4]: for image in images:
...: print(image.attrs['src'])

Zart
28.12.2016
20:19:35

Johnnie
28.12.2016
20:20:10
это почему?
Task
Given a list lst and a number N, create a new list that contains each number of lst at most N times without reordering. For example if N = 2, and the input is [1,2,3,1,2,1,2,3], you take [1,2,3,1,2], drop the next [1,2] since this would lead to 1 and 2 being in the result 3 times, and then take 3, which leads to [1,2,3,1,2,3].
Example
delete_nth ([1,1,1,1],2) # return [1,1]
delete_nth ([20,37,20,21],1) # return [20,37,21]

Igor
28.12.2016
20:20:53
а
прикольная задачка

Zart
28.12.2016
20:21:03
а, я условия не так прочитал

Johnnie
28.12.2016
20:21:11
я тоже сначала не так прочел

Zart
28.12.2016
20:21:15
я думал оставить лишь элементы, встречающиеся не чаще N раз

Johnnie
28.12.2016
20:21:15
думаю а хули тут
.count() в компрехеншн и алга

Igor
28.12.2016
20:21:37
ыы, то же самое подумал

Zart
28.12.2016
20:23:36

Johnnie
28.12.2016
20:23:53
ну с енумерейтом, да)

Google

Zart
28.12.2016
20:24:09
это чтобы не перекладывать из одного листа в другой

Denis
28.12.2016
20:24:14
долга

Johnnie
28.12.2016
20:24:16
я хотел сначала что-то вроде [i for i in order if order.count(i) <= e_max]

Zart
28.12.2016
20:24:25
долго, да. треугольно ж
хммм
>>> import collections
>>>
>>> order, max_e = [20, 37, 20, 21], 1
>>>
>>> def nth(e, cache=collections.defaultdict(int)):
... def check(x):
... cache[x] += 1
... return cache[x] <= e
... return check
...
>>> list(filter(nth(max_e), order))
[20, 37, 21]

Igor
28.12.2016
20:36:10
как это работает :О

Johnnie
28.12.2016
20:36:14
ээээ...

Zart
28.12.2016
20:36:22
т.е. функция проверки ведет подсчет
и возвращает тру/фалс если порог превышен

Igor
28.12.2016
20:36:24
(риторический вопрос, лень вникать, туплю, пойду спать лучше)
аааа
ыыыы

Zart
28.12.2016
20:36:35
фильтр тогда отбрасывает что превысило порог

Igor
28.12.2016
20:36:59
а defaultdict(int) нулю равен по умолчанию получается?
я идиот всегда lambda: 0 писал

Zart
28.12.2016
20:37:16
это по идее должно дать самый эффективный по скорости вариант, за счет отслеживания колва, а не считать его каждый раз заново через count
>>> int()
0

Johnnie
28.12.2016
20:38:10
Passed: 45 Failed: 0
:)

Google

Denis
28.12.2016
20:39:00
А время скоко?

Johnnie
28.12.2016
20:39:06
запускаю с 1000000
бля, а как быстрей всего вывести время
datetime.datetime.time() ?

Denis
28.12.2016
20:39:49
timeit.timeit(..., number=1)

Johnnie
28.12.2016
20:41:06
не, я не про то

Zart
28.12.2016
20:41:13
мда. граблями меня нихуево ща прищемило
import collections
order, max_e = [20, 37, 20, 21], 1
def nth(e):
cache=collections.defaultdict(int)
def check(x):
cache[x] += 1
return cache[x] <= e
return check
list(filter(nth(max_e), order))
потому что иначе придётся каждый раз указывать свежий кэш =_=;

Johnnie
28.12.2016
20:42:44
тож 45 прошло
его запущу тогда

Zart
28.12.2016
20:43:27
>>> list(filter(nth(max_e), order))
[20, 37, 21]
>>>
>>> [i for i in order if nth(max_e)(i)]
[20, 37, 20, 21]
>>>
>>> f = nth(max_e) ; [i for i in order if f(i)]
[20, 37, 21]
тот случай когда нельзя напрямую фильтр в компрехеншен перегнать
во втором случае заново пересоздается кэш на каждый элемент
в фильтре вспомогательная функция генерится лишь раз
в третьем варианте вынесено для того же эффекта

Denis
28.12.2016
20:45:45
(lambda f: [i for i in order if f(i)])(nth(max_e))

Johnnie
28.12.2016
20:46:49
@bladdon ты общее время хотел посмотреть?

Denis
28.12.2016
20:46:53
Ага

Johnnie
28.12.2016
20:46:54
или отдельное для каждого теста?

Zart
28.12.2016
20:46:56
врапперная лямбда..
я собсно изначально хотел это всё однострочником захуячить

Johnnie
28.12.2016
20:46:56
а ок

Google

Johnnie
28.12.2016
20:47:00
Started at: 2016-12-28 20:46:01.461851
Finished at: 2016-12-28 20:46:11.356301
In seconds: 0:00:09.894450

Zart
28.12.2016
20:47:16
просто слишком ёбнуто выходит там с c.__setitem__, c.setdefault

Johnnie
28.12.2016
20:47:17
но это мелкий тест
Зарт, оставляю в том виде?
def delete_nth3(order, max_e):
def nth(e):
cache = collections.defaultdict(int)
def check(x):
cache[x] += 1
return cache[x] <= e
return check
return list(filter(nth(max_e), order))

Zart
28.12.2016
20:47:52
ага. читабельно ж

Denis
28.12.2016
20:48:09
Сравни вот это с моим на крупном тесте

Johnnie
28.12.2016
20:48:11
list_len = 1000000
min_num, max_num = 1, 50
repeats = 3

Denis
28.12.2016
20:48:14
Порядка 10^5

Johnnie
28.12.2016
20:48:15
или другие поставить?

Denis
28.12.2016
20:48:22
Ну или ^6

Johnnie
28.12.2016
20:49:24
лан запускаю и иду спать
это пиздец надолго)

Denis
28.12.2016
20:49:46
10^5 запусти
Это быстро

Johnnie
28.12.2016
20:50:01
не, ты чо

Zart
28.12.2016
20:50:05
в прошлый раз сколько было?

Denis
28.12.2016
20:50:07
Это секунда

Johnnie
28.12.2016
20:50:09
я до этого запускал 300
ждал полчаса

Denis
28.12.2016
20:50:18
Потому что квадрат

Zart
28.12.2016
20:50:19
@bladdon @zartsoft
t1: 1332.5145938309997
t2: 808.875277266
t3: 134.11211553499925
Эта группа больше не существует