Jump to content
Korean Random
SkepticalFox

Blender Tank Viewer

Recommended Posts

 

 

весь затык в поиске индекса элемента, в большом списке.

 

Покажи чуть больше. Если нужно искать индекс элемента, то имеет смысл изначально элементы проиндексировать:

 

a = ['a', 'b', 'c']

 

заменить на

 

b = {0: 'a', 1: 'b', 2: 'с'}

 

При этом как известно словари работают в разы быстрее списков. 

Share this post


Link to post

Short link
Share on other sites

enumerator же)

 

Он работает при переборе.

 

А зачем нам перебор, если изначально можно хранить данные как b = {0: 'a', 1: 'b', 2: 'с'} и это само уже по себе всегда будет быстре нежели list()

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites
        vert_list = {}
        old2new = {}
        vidx = 0
        for i in range(verticesCount):
            self.__primitives_file.seek(pos)
            x, z, y, n, u, v = unpack('<3fI2f', self.__primitives_file.read(24))
            if is_skinned:
                y = -y
            if flgNewFormat:
                N = unpackNormal_tag3(n)
            else:
                N = unpackNormal(n)
            XYZ = Vector((x, y, z))
            UV = Vector((u, 1-v))
            
            XYZNUV = (XYZ, N, UV)
            # Вот эта часть тормозит:
            # Возможно из-за vert_list.index(XYZNUV)
            if XYZNUV not in vert_list:
                old2new[i] = vidx
                vidx += 1
                vert_list[XYZNUV] = vidx
            else:
                old2new[i] = vert_list[XYZNUV]
            pos += SIZE

Пробуй )))))

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Сам разбери мой код, что я выше писал. Там вместо списка сделан словарь vert_list = {}

 

ЗЫ: Массив это array, в питоне правильно говорить списки и словари, а иначе не ясно что ты имеешь ввиду

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Я про tuple)

 

Это неизменяемый список tuple([1,2,3]) = (1,2,3)

Но причем тут все это? Тебе нуно чтобы vert_list по завершению алгоритмы стал списком?, дык list(vert_list.keys()) тебе поможет )))

Share this post


Link to post

Short link
Share on other sites

 

 

Оптимизация - уровень бог

 

Ну дык, я также парился с обфускатором, потому делюсь тем что сам видел ))))

Share this post


Link to post

Short link
Share on other sites

Теперь на модель стало страшно смотреть, алгоритм испорчен(

работает быстро, но хрень получается?)

Share this post


Link to post

Short link
Share on other sites

@StranikS_Scan, list(vert_list.keys()) - портит порядок вершин, который должен быть неизменным(

Т.е. есть у нас словарь:

a = {

'a':1,

'abvgd':2,

'abcd':4,

'azaza':3

}

и мы должны получить

b == ['a', 'abvgd', 'azaza', 'abcd']

 

Это проблема номер два гыгыггы ))))

Короче нельзя просто взять .keys() надо инdертировать словарь, тогда номера станут ключами, а вершины значениями и питон в таких случаях уже сам отсортирует словарь по цифрам ключей и тогда можно будет брать .itervalues()

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...