Панды расширяют буквенно-цифровые символы для повторения

У меня есть список с буквенно-цифровыми символами, как показано ниже

l1 = ['G1','L1']

Я хотел бы знать, есть ли у нас что-то вроде ниже

for i in range(l1):  #this doesn't work because range is only for numeric values
for i in range(G1:L1): #this also doesn't work

Однако я хочу, чтобы значение i при каждом запуске менялось с G1 на H1 на I1 на J1 на K1 на L1

Вам нужно что-то вроде: от AA1 до AG8, например?

Corralien 22.03.2022 11:11

да, было бы полезно знать

The Great 22.03.2022 11:13
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
40
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Range всегда ожидает число и не может работать со строками.
Однако вы можете использовать встроенную функцию ord() для преобразования букв в числа, а затем использовать функцию chr() для преобразования их обратно из чисел в символы ASCII.

Код

a = [chr(c)+'1' for c in range(ord('G'), ord('M'))]
print(a)

Выход

['G1', 'H1', 'I1', 'J1', 'K1', 'L1']

Обновление: решение для двойных символов.

Сделать это для двойных символов немного сложнее, но в Ответ StackOverflow есть решение. Вы можете просто использовать функции from_excel() и to_excel() из этого ответа и заменить их в приведенном выше коде следующим образом.

Код

a = [to_excel(i) for i in range(from_excel('G'), from_excel('AG'))]
print(a)

Выход

['G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF']

@TheGreat, не забудьте принять ответ, который решил вашу проблему :)

DollarAkshay 22.03.2022 11:04

Не работает от АА до АГ?

Corralien 22.03.2022 11:05

Кстати, один быстрый вопрос - не работает, если мне нужно Z? делая это range(ord('G'), ord('Z')), получает только до Y. Я не могу добавить +1 к диапазону, потому что это выдает ошибку. Дайте мне знать, как мы можем получить значение Z?

The Great 22.03.2022 11:06

@TheGreat, ты можешь просто сделать ord('Z') + 1

DollarAkshay 22.03.2022 11:07

@Corralien Да, это работает только для отдельных персонажей. Я мог бы написать пользовательскую функцию, которая делает это, если OP хочет

DollarAkshay 22.03.2022 11:09

@DollarAkshay - Просто чтобы вы знали, что мой вопрос касается этой проблемы, которую я пытаюсь решить - stackoverflow.com/questions/71567484/… . Тем не менее, я не могу найти решение для этого. Это что-то, с чем вы могли бы мне помочь?

The Great 22.03.2022 11:19

@TheGreat Я обновил свой ответ. Дайте мне знать, если это решит ваш вариант использования.

DollarAkshay 22.03.2022 11:39

Ты можешь использовать:

from openpyxl.utils import coordinate_to_tuple, get_column_letter

def excel_range(start, end):
    t1 = coordinate_to_tuple(start)
    t2 = coordinate_to_tuple(end)
    rows, cols = zip(t1, t2)
    cells = []
    for r in range(rows[0], rows[1]+1):
        for c in range(cols[0], cols[1]+1):
            cells.append(f'{get_column_letter(c)}{r}')
    return cells

cells = excel_range('AA1', 'AC4')

Выход:

>>> cells
['AA1',
 'AB1',
 'AC1',
 'AA2',
 'AB2',
 'AC2',
 'AA3',
 'AB3',
 'AC3',
 'AA4',
 'AB4',
 'AC4']

Спасибо за вашу помощь. Проголосовал. У вас есть опыт использования xlwings?

The Great 22.03.2022 11:24

Нет, извините, я работаю в Linux, поэтому я использую openpyxl.

Corralien 22.03.2022 11:25

Но openpyxl, вероятно, уже установлен в вашей среде.

Corralien 22.03.2022 11:26

Я уже видел ваш вопрос, но решить его действительно не очевидно :(

Corralien 22.03.2022 11:29

Я прекрасно понимаю твой вопрос... лол

Corralien 22.03.2022 11:32

Мне удалось написать ответ на этот stackoverflow.com/questions/71567484/…. Могу ли я получить ваши предложения по улучшению ответа? Если у вас есть какие-либо советы/предложения по повышению эффективности моего кода, я могу отметить ваше предложение как ответ на этот пост.

The Great 22.03.2022 14:53

Другие вопросы по теме