Как я могу посчитать элемент в списке, как это - PullRequest
0 голосов
/ 13 марта 2020

Есть 3 пункта: «Питер», «Том», «Винсент»

, если я хочу ввести 5 раз, чтобы проверить, сколько раз мои входы соответствуют требуемым элементам, что я должен использовать?

Я пробовал .count метод, но он не соответствовал моим требованиям ...

Например,

мои входные данные:

Tom

David

David

Vincent

Sam

Ожидаемый результат должен быть: Number = 2

Должен ли я использовать list или dict или другие методы?

Ответы [ 4 ]

1 голос
/ 13 марта 2020

Предполагая, что вы хотите пересечение списка ваших входов с необходимыми элементами

seek = ['Peter', 'Tom', 'Vincent']
my_inputs = ['Tom', 'David', 'David', 'Vincent', 'Sam']

len([x for x in my_inputs if x in seek]) // 2

Таким образом, в основном для каждого из ваших входов вы хотите увидеть, соответствует ли какой-либо элемент в поиске. Просто создайте такой список пересечений и сделайте len на нем

, ваши входы могут повторяться:

seek = ['Peter', 'Tom', 'Vincent']
my_inputs = ['Tom', 'Tom', 'David', 'David', 'Vincent', 'Sam', 'Peter']

len([x for x in my_inputs if x in seek]) // 4

РЕДАКТИРОВАТЬ : хотя он показывает, насколько мощны списки в python, но требует дополнительного пробела (O (N), где N - это len (my_inputs)), в то время как решение Barmar требует O (1) дополнительного пробела, так что вам, вероятно, будет лучше с ответом Бармара.

1 голос
/ 13 марта 2020

Просто используйте al oop, который увеличивает счетчик.

count = 0
items = ['Peter', 'Tom', 'Vincent']
inputs = ['Tom', 'David', 'David', 'Vincent', 'Sam']
for el in inputs:
    if el in items:
        count += 1
print("Number =", count)
0 голосов
/ 13 марта 2020

Вы также можете использовать Counter в модуле collections для этого:

from collections import Counter
all_items = Counter(['Tom', 'David', 'David', 'Vincent', 'Sam'])

Counter является подклассом dict. Счетчик all_items будет выглядеть следующим образом:

Counter({'Tom': 1, 'David': 2, 'Vincent': 1, 'Sam': 1})

Затем вы можете получить счетчик передаваемого ключа следующим образом:

all_items.get('Tom') 

Output: 1

all_items.get('David')

Output: 2

Чтобы получить несколько предметов, вы можете выполните следующие действия:

items_to_check = ['Peter', 'Tom', 'Vincent'] # your list of multiple items to check

for item in items_to_check:
    print(f"Item: {item} \t Count: {all_items.get(item)}")

Вывод:

Item: Peter      Count: None
Item: Tom        Count: 1
Item: Vincent    Count: 1

Чтобы получить сумму:

sum([x[1] for x in all_items.items() if x[0] in items_to_check])

Output: 2
0 голосов
/ 13 марта 2020

Здравствуйте, дорогой @tse chun hei!

Элегантный и эффективный способ сделать это через numpy:

inputs = ['Tom','David','David','Vincent','Sam']
items = ['Peter','Tom','Vincent']

Затем вы можете объединить np.isin() с np.sum() и получите вывод с одной строкой кода:

np.sum(np.isin(inputs,items))
2

Я надеюсь, что этот пост был полезным!

С наилучшими пожеланиями,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...