Удалить последние 5 символов

Эта программа должна выводить штрих из списка элементов.
Например:
Ввод --> [корова, яблоко, свинья, корова, корова]
Выход --> 3 коровы, 1 яблоко и 1 свинья.

def count_things(text):
    a = {}
    for i in text:
        if i in a:
            a[i] += 1
        else:
            a[i] = 1

    text = ''

    for i in a:
        if a[i] > 1:
            text += str(a[i]) + ' ' + str(i) + 's and '
        else:
            text += str(a[i]) + ' ' + str(i) + ' and '

    return text[:-5]

Я хочу вывести строку без использования «[:-5]» из последней строки (поэтому мне не нужно писать «и» в конце). Как это сделать?

Что вы подразумеваете под "инсультом"?

jarmod 22.12.2020 21:51

@jarmod stroke == строка или оператор

Barmar 22.12.2020 21:51

Вопрос не ясен. Пожалуйста, переформулируйте вопрос

Harsh 22.12.2020 21:51

Ввод должен быть строковым списком (например: «корова, яблоко, корова,..»)?

Mirko Brombin 22.12.2020 21:59

Обратите внимание, что на английском языке вывод будет выглядеть как «3 коровы, 1 яблоко и 1 свинья».

jarmod 22.12.2020 22:35
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
60
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

collections.Counter должен делать именно то, что вы хотите. Он принимает итерацию и дает вам словарь уникальных элементов в качестве ключей, а значения — это количество раз, когда этот элемент был найден.

Вопрос в том, как составить предложение с and между каждым элементом, а не в том, как считать.

Barmar 22.12.2020 21:53

Хороший звонок, ввод/вывод в верхней части вопроса меня достали.

xgf115 22.12.2020 22:02
Ответ принят как подходящий

Этого ты хочешь?

from collections import Counter

stuff = ["cow", "apple", "pig", "cow", "cow"]
print(" and ".join([f"{v} {k + 's' if v > 1 else k}" for k, v in Counter(stuff).items()]))

Выход:

3 cows and 1 apple and 1 pig

Это не добавляет множественное число «s», когда количество больше 1.

Barmar 22.12.2020 22:05

@ Бармар, теперь это так.

baduker 22.12.2020 22:08

Не делайте конкатенацию в цикле. Поместите каждый элемент в список, а затем используйте join(), чтобы объединить их.

Вы также можете использовать метод items() для извлечения имени животного и подсчета непосредственно в переменные.

words = []
for animal, count in a.items()
    if count > 1:
        animal += "s"
    words.append(f"{count} {animal}"
return " and ".join(words)

Предполагая, что ответы Бармара и бадукера показывают лучший подход. Желая использовать ваш код, если ввод представляет собой строку со списком слов, разделенных запятыми, вам нужно разделить строку на ",":

def count_things(text):
    a = {}
    for i in text.split(","):
        if i in a:
            a[i] += 1
        else:
            a[i] = 1

    text = ''

    for i in a:
        if a[i] > 1:
            text += str(a[i]) + ' ' + str(i) + 's and '
        else:
            text += str(a[i]) + ' ' + str(i) + ' and '

    return text[:-4]

и:

print(count_things("cow, apple, pig, cow, cow"))

теперь должно вернуться:

1 cow and 1  apple and 1  pig and 2  cows 

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