05
Окт
2017

Массив объектов. Поиск по переменной объекта

Для лучшей формулировки приведу сразу код.

import os

class A:
    _index = 0
    _value = 0

def findValue(ar,ind):
    l = []
    b = 0
    for i in ar:
        if i._index == ind:
            b += 1
            l.append(i._value)
    if b == 0:
        return []
    else:
        return l

arr = []
for i in range(10):
    tmpA = A()
    tmpA._index = os.urandom(2).encode('hex').upper()
    tmpA._value = os.urandom(32).encode('hex').upper()
    print 'i =',tmpA._index,'v =',tmpA._value
    arr.append(tmpA)
    del tmpA

Запускаем, получая массив arr (пример случайный):

A4CC 0E125E7CE7D1474B9600F50BDF7B03169FF2B7392D3218F30B2403A34ED5E81D
B59B 1ADAE39612D0BD30EAE8D186F2CEED7EA144874EBFD022D850204F748E555D1E
5258 CB004CFCD8BC8A0EC0E6C45119DD70FD859BECDFC367BA9F8294D862ED07585D
63DF FB12F4020BE62351C6F87BA170CA1A945AEFF6C1DA12B0C8F4356F0CDC6729A4
2FF4 2B44AE2E462361FEFEE5251275F4329A327B8D2CCE24C0A2A1BB3E95E522B217
A2EF B8DC1FD47FB12A1AF74F44B2176F3B508A9748183E49FD1E4474027FE6DD39F9
ADBE 442C12FD91FAB2EA668CAD336EF5F7B97D3953E7362DCDE50C74D965CB86BE59
581D FE47CBE6A3F91F020C531A568F5D047CEABD0B95C00933370B59D4B126336555
D572 FED36C1198DDE66A62B40DF90529EEFD2AD3F5298490D84FFD4DBA5CEE5A16C8
EBFE 4A6511059AB17DF2FC4432260C527885760233527D9CF6349AA307DF2BB80F48

Далее, вызываем функцию findValue:

findValue(arr,'2FF4')

Получаем:

['2B44AE2E462361FEFEE5251275F4329A327B8D2CCE24C0A2A1BB3E95E522B217']

Вопрос. Как реализовать функцию findValue оптимальным способом, т.е. без перебора массива arr? Можно ли как-то обращаться по _index?

То есть интересует способ, который будет быстрее. Спасибо

Источник: https://ru.stackoverflow.com/questions/726830/%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2-%D0%9F%D0%BE%D0%B8%D1%81%D0%BA-%D0%BF%D0%BE-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0

Share

Тебе может это понравится...