Мне нужно посчитать, сколько точных букв в слове. Например, мне нужно посчитать букву «i» в этом слове. И мне нужно найти, в каком слове больше всего буквы «i».
list = ['box', 'computer', 'sheep', 'family', 'illegal', 'bubble', 'lamp', 'circuit', 'building', 'plant', 'these', 'cup']
def fgv(list):
counter= 0
maximal = 0
word= "x"
for e in list:
counter = 0
if e.__contains__("i"):
for i in range (len(e)):
if e[i] == "i":
couner += 1
if counter < maximal:
maximal = counter
word = e
return(word)
print(f"{fgv(list)}")
В python у строк есть метод count(), который, кажется, именно то, что вы ищете,






def count_letter(list):
counter = 0
maximal = 0
word = ""
for e in list:
counter = e.count("i")
if counter > maximal:
maximal = counter
word = e
return word
word_list = ['box', 'computer', 'sheep', 'family', 'illegal', 'bubble', 'lamp', 'circuit', 'building', 'plant', 'these', 'cup']
print(count_letter(word_list))
попробуйте этот код
Это печатает только первое вхождение единицы с максимальным количеством i, если есть ничья. Не обязательно неправильно, я просто указываю на это.
О, я вижу, спасибо за вашу помощь.
Добро пожаловать в Stack Overflow! Вы опубликовали 9 ответов за последние 24 часа, и большинство из них либо в основном представляют собой код без пояснений, либо написаны (полностью или частично) ИИ (например, ChatGPT) или и тем, и другим. Предупреждение о том, что публикация контента, созданного искусственным интеллектом, здесь запрещена. Если вы использовали инструмент ИИ, чтобы помочь с каким-либо ответом, я бы посоветовал вам удалить его. Для ответов, в которых вы не использовали ИИ, имейте в виду, что предоставление дополнительного контекста относительно того, почему и / или как ваш код отвечает на вопрос, повышает его долгосрочную ценность.
Читатели должны тщательно и критически рассмотреть этот ответ, поскольку информация, сгенерированная ИИ, часто содержит фундаментальные ошибки и дезинформацию. Если вы наблюдаете проблемы с качеством и/или у вас есть основания полагать, что этот ответ был сгенерирован искусственным интеллектом, пожалуйста, оставьте соответствующий отзыв.
Это плохой совет. 1) переменная с именем list - нет-нет. 2) Если входной список пуст, возвращаемое значение будет пустой строкой. Но в списке не было пустой строки! 3) Он будет возвращать только первое наблюдаемое слово, соответствующее условию - их может быть несколько
Если вас интересует только одно (первое) слово с наибольшим количеством i в случае ничьей, то может быть желателен этот функциональный однострочник:
lst = ['box', 'computer', 'sheep', 'family', 'illegal', 'bubble', 'lamp', 'circuit', 'building', 'plant', 'these', 'cup']
print(max(lst, key=lambda x: x.count("i")))
@juanpethes рассмотрите возможность сохранения результата word.count('i') для каждого слова и повторения zip lst и word_counts в вашей окончательной композиции списка.
Сейчас я сделал подход со словарем, который эффективно сохраняет word.count('i') для каждого слова. Не стесняйтесь оставлять отзывы об этом подходе.
Ой, извини. Не хотел этого делать - теперь я храню только то, что я однозначно предоставил сейчас. А также не обвиняйте меня в копировании. Я даже не посмотрел на твой ответ.
Если вы считаете, что словари могут быть введены в целые числа, то как насчет:
_list = ['box', 'computer', 'sheep', 'family', 'illegal', 'bubble', 'lamp', 'circuit', 'building', 'plant', 'these', 'cup']
def get_count(list_of_words: list[str], letter: str) -> list[str]|None:
if list_of_words and len(letter) == 1:
d = {}
for word in list_of_words:
d.setdefault(word.count(letter), []).append(word)
return d[max(d)]
print(get_count(_list, 'i'))
Выход:
['circuit', 'building']
Еще один подход, который делает слишком много работы для вашей проблемы, но демонстрирует объект collections.Counter stdlib, который очень полезен для множества других приложений!
from collections import Counter
words = ['box', 'computer', 'sheep', 'family', 'illegal', 'bubble', 'lamp', 'circuit', 'building', 'plant', 'these', 'cup']
word_counts = [Counter(word) for word in words]
# word_counts is now a list of Counter objects, which each look a little bit
# like {"b": 1, "o": 1, "x": 1} for box
# or {"i": 1, "l": 3, "e": 1, "g": 1, "a": 1} for illegal
# now we'll get the index for the word with the most "i's"
idx_max_by_i = max(enumerate(word_counts), key=lambda pair: pair[1]['i'])[0]
# and convert that back to the word itself by indexing into the words list
result = words[idx_max_by_i]
Есть определенно лучшие способы сделать это, но я подумал, что было бы полезно показать, на что способен Counter. Обратите внимание на его более мощные методы, такие как most_common(n), которые показывают наиболее распространенное количество N элементов, или elements, которые возвращают «развернутый» вид элементов в счетчике (например, Counter('sheep').elements() создает что-то вроде "eehps")
[w.count('i') for w in list]→[0, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, 0]