Member 13623499 Ответов: 0

Python оптимизирует вложенный цикл for с помощью append


У меня есть 2 цикла for, которые будут работать в основном для больших данных. Я хочу оптимизировать это и максимально повысить скорость.

    source = [['row1', 'row2', 'row3'],['Product', 'Cost', 'Quantity'],['Test17', '3216', '17'], ['Test18' , '3217' , '18' ], ['Test19', '3218', '19' ], ['Test20', '3219', '20']]
creating a generator object
    
    it = iter(source)
    variables = ['row2', 'row3']
    variables_indices = [1, 2]
    getkey = rowgetter(*key_indices)
    for row in it:
        k = getkey(row)
        for v in zip(variables, variables_indices):
            try:
                o = list(k)  # populate with key values initially
                o.append(v)  # add variable
                o.append(row[i]) # add value
                yield tuple(o)
            except IndexError:
                pass

    def rowgetter(*indices):
        if len(indices) == 0:
            #print("STEP 7")
            return lambda row: tuple()
        elif len(indices) == 1:
            #print("STEP 7")
            # if   only one index, we cannot use itemgetter, because we want a
            # singleton sequence to be returned, but itemgetter with a single
            # argument returns the value itself, so let's define a function
            index = indices[0]
            return lambda row: (row[index],) 
   
        else:

            return operator.itemgetter(*indices)

Это вернет кортеж, но он занимает так много времени в среднем 100 секунд для 100 000 строк (источник имеет 5 строк в Примере ). Может ли кто - нибудь помочь сократить это время, пожалуйста.

примечание : Я также пробовал использовать встроенные циклы и понимание списка, которое не возвращается для каждой итерации

Что я уже пробовал:

slist = (yieldfun(getkey(row), v, row[1]) for row in it for v, i in zip(variables, variables_indices) if row)

0 Ответов