Nano Hash - криптовалюты, майнинг, программирование

Динамическое создание переменных в цикле For, Python

Я пытаюсь динамически создавать переменные в цикле for на основе подсчета.

Я использую модуль openpyxl для перебора рабочего листа.

value = ~sheet name after using a loop to iterate over sheet names~
wb = (path_to_workbook, use_iterators = True)
ws = wb.get_sheet_by_name(name = value)

for a,b,c,d in ws.iter_rows():
    print a.internal_value

Проблема в том, что количество переменных в цикле for зависит от того, сколько активных столбцов есть на каждом листе, который меняется от листа к листу. Он выдаст ошибку:

"Слишком много значений для распаковки"

если у меня нет правильного количества переменных для распаковки.

Я могу получить количество столбцов, используя:

ws.get_highest_column()

Итак, как-то мне нужно сделать:

for ~dynamically create variables by count of columns~ in ws.iter_rows():
    print variable1.internal_value

Я видел несколько сообщений об использовании exec, но у меня нет никакого опыта в этом, и я, кажется, всегда читаю о том, как это может привести к неприятностям.


  • Вам никогда не нужно динамически называть переменные. В этом случае вы неправильно понимаете, что делают циклы for - это то, что известно как циклы foreach в других языках, если это поможет. 05.10.2013
  • Спасибо. Я понимаю, что цикл for предназначен для каждого элемента, в данном случае для каждой строки. Но потенциально в каждой строке может быть много элементов. Судя по тому, как я видел примеры модулей openpyxl с использованием iter_rows(), мне казалось, что это необходимо сделать. Это и тот факт, что он ошибся, если я не установил точное количество переменных для каждого активного столбца. Странное поведение, и я только что обдумал все это. 05.10.2013

Ответы:


1

Нет необходимости создавать динамическое количество аргументов. Вместо этого используйте один; ему назначается вся строка, и затем вы можете использовать индексы для доступа к элементам:

for row in ws.iter_rows():
    # row is now a tuple
    first_value = row[0]
04.10.2013
  • Большое спасибо @Martijn! Я полностью обдумал это решение и забыл об индексах. Спасибо что подметил это! 05.10.2013

  • 2
    for ~dynamically create variables by count of columns~ in ws.iter_rows():
        print variable1.internal_value
    

    Вы можете просто перебрать все строки, не распаковывая каждую из них.

    for row in ws.iter_rows():
        # row is a tuple
        print row[0].internal_value
    
    04.10.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..