Подсчет столбцов для VLOOKUPS с использованием Python - PullRequest
0 голосов
/ 21 декабря 2018

Я практикую Python, для которого я ОЧЕНЬ новичок, и подумал, что смогу применить его к небольшому раздражению, которое я испытываю при выполнении VLOOKUPS в excel.У нас есть огромные базы данных, длиной более 15 000 строк и до GG в столбцах, поэтому мне нужен простой способ проверить номер столбца для поиска, а не для выделения, которое задерживается или подсчитывается вручную.

Я пробовал следующий код, который работает до некоторой степени.Это позволяет мне проверять значение двух разных трехколоночных кодов (Excel Max - XFD);но если я сравниваю столбец AA и XFD, возникает ошибка, поскольку в [2] нет значения для начала, там нет массива.

Как я могу исключить это или проверить, существует ли оно до того, как я выполнюдля цикла?

def get_character_distance2(start,end):
endList = list(end)
print(endList)

startList = list(start)
print(startList)

firstDistance = 0
secondDistance = 0
thirdDistance = 0

totalEnd = 0
totalStart = 0

for item in endList[0]:
    firstDistance += (ord(item.upper()) - ord(startList[0])) + 1

for item in endList[1]:
    secondDistance += ((ord(item.upper()) - ord(startList[1])) + 1) * 26

for item in endList[2]:
    thirdDistance += ((ord(item.upper()) - ord(startList[2])) + 1) * 676

totalStart += firstDistance + secondDistance + thirdDistance
print(firstDistance)
print(secondDistance)
print(thirdDistance)
print(totalStart)

для результата:

get_character_distance2('AAA','ZZZ')

Результат (Fine):

['Z', 'Z', 'Z']
['A', 'A', 'A']
26
676
17576
18278

Другой чек:

get_character_distance2('AA','ZZZ')

Плохой результат:

['Z', 'Z', 'Z']
['A', 'A']
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-185-c330b0ebbf1d> in <module>()
----> 1 get_character_distance2('AA','ZZZ')

<ipython-input-182-a080de45986e> in get_character_distance2(start, end)
 23 
 24     for item in endList[2]:
---> 25         thirdDistance += (ord(item.upper()) - ord(startList[2]))
 26         thirdDistance +=1
 27         thirdDistance *= 676

IndexError: list index out of range

Я просто хочу, чтобы то же самое, что и первое, добавляло значения циклов for при условии, что на самом деле есть уровень, на который можно сосчитать.Если значения массива нет, можно предположить, что число там равно 0.

1 Ответ

0 голосов
/ 21 декабря 2018

Я пришел к следующему решению с советами Анварвика по try и except.

def get_character_distance2(start,end):
startList = list(start)
print(startList)

endList = list(end)
print(endList)

firstDistance = 0
secondDistance = 0
thirdDistance = 0

totalEnd = 0
totalStart = 0

for item in endList[0]:
    firstDistance += (ord(item.upper()) - ord(startList[0])) + 1

try:
    for item in endList[1]:
        secondDistance += ((ord(item.upper()) - ord(startList[1])) + 1) * 26
except:
    try:
        for item in endList[1]:
            secondDistance += ((ord(item.upper()) - ord('A')) + 1) * 26
    except:
        secondDistance = 0

try:
    for item in endList[2]:
        thirdDistance += ((ord(item.upper()) - ord(startList[2])) + 1) * 676
except:
    try:
        for item in endList[2]:
            thirdDistance += ((ord(item.upper()) - ord('A')) + 1) * 676
    except:
        thirdDistance = 0

totalStart += firstDistance + secondDistance + thirdDistance
print(firstDistance)
print(secondDistance)
print(thirdDistance)
print(totalStart)

Большое спасибо!

...