Вывод индексов по повторяющемуся имени
Есть скрипт:
list = []
input_name = 5
for i in range(input_name):
list.append(input('Введите {0} имя: '.format(str(i+1))))
for i in range(len(list)):
print('{0}'.format(str(list[i])), end='')
if i != (len(list) - 1):
print('.', end='')
x = list.index('Влад')
print('\n{0} позиция имени'.format(x + 1))
В котором пользователь заполняет лист именами и если в списке встречается имя "Влад" то выводится индекс этого имени. Нужна помощь в том что если в лист записывается имя "Влад" например 2 раза нужно чтобы вывелся индексы этого имени.
Ответы (3 шт):
Автор решения: Данилкин
→ Ссылка
Самый простой способ подсчёта дублируемых элементов в списке с индексом.
list = []
counter = []
input_name = 5
name = 'Влад'
for i in range(input_name):
list.append(input('Введите {0} имя: '.format(str(i + 1))))
for i in range(len(list)):
if list[i] == name:
counter.append(i)
print(f'{name} под индексом: ', *counter)
Автор решения: NEWME0
→ Ссылка
name_tofind = 'Влад'
name_count = 5
name_list = list()
for i in range(name_count):
name_list.append( input(f'Введите {i+1} имя: ') )
indices = [i+1 for i, name in enumerate(name_list) if name == name_tofind]
print(f'{name_tofind} под индексом: ', *indices)
Автор решения: MarianD
→ Ссылка
INPUT_NAMES = 5
names = [input(f'Введите {i+1} имя: ') for i in range(INPUT_NAMES)]
indices = [i for i, name in enumerate(names) if name == 'Влад']
if indices:
print(f'Имя Влад находится на позициях: {", ".join(map(str, indices))}.')
else:
print('Нет имени Влад.')
Примеры вывода этой программы
(для разных вводов):
Имя Влад находится на позициях: 0, 1, 4.Имя Влад находится на позициях: 3.Нет имени Влад.
Что я сделал в отличие от вас:
- Имя константы написал прописными буквами в соответствии с PEP-8.
- Не использовал имя
listдля списка, потому что это имя стандартной функции. - Вместо циклов использовал генераторы списка.
- Вместо метода
.format()применил f-строки. - Использовал стандартную функцию
enumerate(). - Сделал строку из отысканных индексов, чтобы они были на выводе отделены запятой и пробелом:
", ".join(map(str, indices)):map(str, indices)применит функциюstr()к всякому элементу спискаindices,- затем
", ".join()сделает из этого списка (уже строк) одну строку (с", "между индивидуальными элементами списка).