python сравнение двух списков и сохранение второго индекса списка

#python

#python

Вопрос:

Я беру пользовательский ввод «компонентов», разбивая его на список и сравнивая эти компоненты со списком доступных компонентов, сгенерированных из столбца A таблицы Google. Затем то, что я пытаюсь сделать, это вернуть значение ячейки из столбца G, соответствующего индексу столбца A. Затем повторите это для всех входных значений.

Пока я получаю первое значение просто отлично, но мне, очевидно, чего-то не хватает, чтобы вернуть его обратно и к оставшимся компонентам пользовательского ввода. Я попробовал кое-что, используя itertools, но не смог получить желаемые результаты. У меня такое чувство, что я столкнусь с проблемой, когда найду решение этой проблемы здесь или самостоятельно.

         mix = select.split(',')     # sets user input to string and sparates elements
        ws = s.worksheet("Details") # opens table in google sheet
        c_list = ws.col_values(1)   # sets column A to a list
        modifier = [""] * len(mix)  # sets size of list based on user input
        list = str(c_list).lower()

        for i in range(len(mix)):
            if str(mix[i]).lower() in str(c_list).lower():
                for j in range(len(c_list)):
                    if str(mix[i]).lower() == str(c_list[j]).lower():
                        modifier[i] = ws.cell(j 1,7).value  # get value of cell from Column G corresponding to Column A for component name
        print(mix)
        print(modifier)
 

Ответ №1:

Вы чрезмерно усложняете код, написав C подобный код. Я изменил все циклы, которые у вас были, на более простой одиночный цикл, я также оставил комментарии над каждой строкой кода, чтобы объяснить, что он делает.

 # Here we use .lower() to lower case all the values in select
# before splitting them and adding them to the list "mix"
mix = select.lower().split(",")

ws = s.worksheet("Details")

# Here we used a list comprehension to create a list of the "column A"
# values but all in lower case
c_list = [cell.lower() for cell in ws.col_values(1)]

modifier = [""] * len(mix)

# Here we loop through every item in mix, but also keep a count of iterations
# we have made, which we will use later to add the "column G" element to the
# corresponding location in the list "modifier"
for i, value in enumerate(mix):
    # Here we check if the value exists in the c_list
    if value in c_list:
        # If we find the value in the c_list, we get the index of the value in c_list
        index = c_list.index(value)
        # Here we add the value of column G that has an index of "index   1" to
        # the modifier list at the same location of the value in list "mix"
        modifier[i] = ws.cell(index   1, 7).value

 

Комментарии:

1. Да, я понемногу учусь. Это выглядит намного более чистым. Однако я получаю тот же результат, когда отображаю строку модификатора, когда я использовал 3 значения, которые я использую в качестве тестового ввода. Актуально, когда я печатаю строку модификатора ['4', '', ''] , что я должен получать ['4', '3', '2']

2. Неважно, я разобрался с проблемой. Это было первое место в следующих двух записях.