2014-12-23 2 views
0

У меня есть каждая длинная двоичная строка, которую я хотел бы фильтровать по шаблону. Вот рабочий пример:Эффективный способ фильтрации двоичной строки в python

x = b"\x00\x01\x02\x03\x04\x00\x01\x02\x03\x04" 
x[1] 
y = [x[i] for i in range(len(x)) if not ((i%5 == 4) or (i%5 == 3))] 
bytes(y) 

Это прекрасно работает, но мне интересно, есть ли лучший способ, с точки зрения производительности. Я использую python 3.4, если это имеет значение.

ответ

1

Вы должны, вероятно, создать генератор вместо списка:

bytes(x[i] for i in range(len(x)) if (i % 5) not in [3, 4]) 

и нет:

bytes([x[i] for i in range(len(x)) if (i % 5) not in [3, 4]]) # DON'T DO THIS 

Это позволит сэкономить память (и опыт показывают, что также будет немного быстрее). Я не могу придумать другой (более эффективный) метод.

Смежные вопросы