Форум сайта python.su
Всем привет. Есть небольшой скрипт, но вот внешний вид оставляет желать лучшего, считаю есть альтернативное решение, но мозгов не хватает. Вот кусок кода. в итоге надо посчитать количество вхождений.
........... if ff['status'] == '5' or ff['status'] == '6': if ff['attr'] == 'AAAAA': x += 1 # нужно посчитать количество if ff['attr'] == 'BBBBB': y += 1 if ff['attr'] == 'CCCCC': z += 1 if ff['attr'] == 'DDDDD': q += 1 if ff['attr'] == 'EEEEE': w += 1 print 'AAAAA', x print 'BBBBB', y print 'CCCCC', z print 'DDDDD', q print 'EEEEEE', w
Офлайн
from collections import Counter counter=Counter() if ff['status'] in ('5', '6'): counter[ff['attr']]+=1 print counter
Офлайн
Спс, как всегда все просто.
ЗЫЖ и странно что я написал if ff == ‘5’ or ff == ‘6’: а не if ff in ('5', ‘6’):
Офлайн
zahar
если вам кто то помог на этом форуме ставьте плюсик в карму, ведь человек тратил свое время на решение вашего вопроса.
Офлайн
На будущее, надо писать не так:
if something in (case, case2, ..., case3):
if something in {case, case2, ..., case3}:
Отредактировано Isem (Окт. 22, 2013 08:12:13)
Офлайн
Isemнасколько это критично по вашему?
На будущее, надо писать не так:
Офлайн
JOHN_16поиск во множестве - O(1), в кортеже - O(n)
насколько это критично
Офлайн
JOHN_16Как правильно отметил py.user.next, чем больше элементов, тем критичнее. Кроме того, начиная, кажется, с версии 3.2, конструкция value in {v1,v2, .., v3} отлавливается интерпретатором и оптимизируется.
насколько это критично по вашему?
Офлайн
Давайте попробуем разведку боем. Маленький код на Python2. Перечисление:
import datetime def timeit(func, *args): t1=datetime.datetime.now() func(*args) print datetime.datetime.now()-t1 data_l=range(int(1e7*2)) data_t=tuple(data_l) data_s=set(data_l) def l(var): a=0 for i in var: a+=1 timeit(l, data_l) timeit(l, data_t) timeit(l, data_s)
def search(data): int(1e7*2)/2 in data timeit(search, data_l) timeit(search, data_t) timeit(search, data_s)
Перечисление:
0:00:01.157000
0:00:01.156000
0:00:01.297000
Поиск:
0:00:00.281000
0:00:00.234000
0:00:00
Офлайн
#!/usr/bin/env python3 import timeit def f1(): for c in 'abcd': c in {'a', 'b', 'c', 'd'} def f2(): for c in 'abcd': c in ('a', 'b', 'c', 'd') t1 = timeit.Timer('f1()', 'from __main__ import f1') t2 = timeit.Timer('f2()', 'from __main__ import f2') for t in t1, t2: print(t.repeat(3))
[guest@localhost py]$ ./timecmp.py
[0.4793789889990876, 0.47658576700086996, 0.4846548969999276]
[0.7281753709994518, 0.7266200249996473, 0.7135826749999978]
[guest@localhost py]$
Офлайн