Как из списка, содержащего буквы и цифры, создать список позиций строк, соответствующих параметру?

У меня есть список, созданный из list(input()), содержащий буквы и цифры, лайк ['F', 'G', 'H', '1', '5', 'H'] Я не знаю содержимого списка заранее.

Как мне создать новый список, показывающий позиции строк, соответствующих предопределенному параметру, чтобы я мог получать выходные данные, такие как number_list = [3, 4] и letter_list = [0, 1, 2, 5]?

Я думаю, что мой ответ может включать в себя индекс, enumerate() и цикл for, но я не уверен, как фильтровать содержимое списка так, как я хочу. Мне нужны позиционные значения строк в списке, чтобы я мог использовать функции min() и max(), чтобы крайняя левая буква не появлялась после крайнего правого числа. А позже запретите использовать первое число, равное 0.

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

Barmar 18.06.2024 23:12

Совершенно непонятно, что вы имеете в виду. Хорошо, я получаю два образца результатов. Но что вы подразумеваете под «предопределенным параметром»? enumerate, да, имеет смысл. Но мин и макс здесь не имеют значения. Есть ли в вашей проблеме что-то еще? Почему бы не привести реальный пример предопределенного параметра? Да, вы можете написать функцию, которая принимает список входных данных и кортеж функций-предикатов (например, isnumeric, isalpha), который возвращает кортежи списков позиций. Но в результате не будет ваших удобных имен.

JL Peyret 20.06.2024 04:12
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
67
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Вы можете использовать простой цикл for с isdigit():

def _collect(L):
    nums, alphas = [], []
    for i, val in enumerate(L):
        if val.isdigit():
            nums.append(i)
        else:
            alphas.append(i)
    return nums, alphas


print(_collect(['F', 'G', 'H', '1', '5', 'H']))

Принты

([3, 4], [0, 1, 2, 5])

Еще один дубль – на этот раз с использованием наборов...

myList = ['F', 'G', 'H', '1', '5', 'H']

theNumbers = [pos for pos in range(len(myList)) if myList[pos].isdigit()]

theOthers = sorted(list(set(range(len(myList))) - set(theNumbers) ))

print("numbers:", theNumbers )
print(" others:", theOthers )

Выход:

numbers: [3, 4]
 others: [0, 1, 2, 5]

Вы можете использовать списки с помощью встроенных функций isdigit() и isalpha():

li = ['F', 'G', 'H', '1', '5', 'H']

numb_l = [i for i in range(len(li)) if li[i].isdigit()]
print("Number positions:", numb_l)
char_l = [i for i in range(len(li)) if li[i].isalpha()]
print("Character positions:", char_l)

Выход:

Number positions: [3, 4]
Character positions: [0, 1, 2, 5]

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