У меня есть список, созданный из list(input()), содержащий буквы и цифры,
лайк ['F', 'G', 'H', '1', '5', 'H']
Я не знаю содержимого списка заранее.
Как мне создать новый список, показывающий позиции строк, соответствующих предопределенному параметру, чтобы я мог получать выходные данные, такие как number_list = [3, 4] и letter_list = [0, 1, 2, 5]?
Я думаю, что мой ответ может включать в себя индекс, enumerate() и цикл for, но я не уверен, как фильтровать содержимое списка так, как я хочу.
Мне нужны позиционные значения строк в списке, чтобы я мог использовать функции min() и max(), чтобы крайняя левая буква не появлялась после крайнего правого числа. А позже запретите использовать первое число, равное 0.
Совершенно непонятно, что вы имеете в виду. Хорошо, я получаю два образца результатов. Но что вы подразумеваете под «предопределенным параметром»? enumerate, да, имеет смысл. Но мин и макс здесь не имеют значения. Есть ли в вашей проблеме что-то еще? Почему бы не привести реальный пример предопределенного параметра? Да, вы можете написать функцию, которая принимает список входных данных и кортеж функций-предикатов (например, isnumeric, isalpha), который возвращает кортежи списков позиций. Но в результате не будет ваших удобных имен.






Вы можете использовать простой цикл 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]
Нет необходимости преобразовывать входные данные в список. Вы можете перебирать строку так же, как список.