Подсчет начальных значений из первой последовательности во второй последовательности

Если функции задана последовательность seeds начальных значений, ей необходимо подсчитать для каждого отдельного начального значения количество раз, которое они появляются во 2-й последовательности xs. Затем он должен вернуть счетчики в виде списка целых чисел в том же порядке, что и начальные значения. Если seeds включает повторяющиеся значения, сохраняйте повторяющиеся счетчики в возвращаемом списке. Например, count_each([10,20],[10,20,50,20,40,20]) должен возвращать [1,3] и count_each('aeiou','encyclopedia') should return [1,2,1,1,0].

Я застрял в том, как запрограммировать эту функцию. Это то, что у меня есть до сих пор, но я не могу понять, как именно я буду подсчитывать количество начальных значений во второй последовательности, а не просто проверять, существуют ли значения. Любая помощь по этому поводу будет оценена.

def count_each(seeds,xs):   

    if seeds in xs:
        if seeds == True
    return seeds
        elif seeds == False
    return None

person famguy74    schedule 09.10.2016    source источник
comment
Возможный дубликат Как подсчитать частоту элементы в списке?   -  person Julien    schedule 09.10.2016


Ответы (3)


Я не могу понять, как именно я буду подсчитывать количество начальных значений во второй последовательности, а не просто проверять, существуют ли значения.

Последовательности Python имеют удобный метод .count.

>>> [1,1,1,2,3,4,5].count(1)
3
>>> "ababababcdefg".count("b")
4
person sytech    schedule 09.10.2016

Проверить collections.Counter()

import collections

def count_each(seeds,xs): 
    c = collections.Counter(xs)
    return [c[seed] for seed in seeds]
person xulfir    schedule 09.10.2016

person    schedule
comment
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего поста. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причины вашего предложения кода. - person andreas; 09.10.2016
comment
Чему равны c и d? Это кажется лучшим ответом, но когда я тестирую функцию, она либо возвращает 1, либо ничего, а не то, сколько раз начальное значение появилось во второй последовательности. - person famguy74; 09.10.2016
comment
c - это переменная, которая содержит символы в начальных числах для первого цикла for, а d содержит символы из xs для второго цикла for, а затем мы сравниваем это c == d, если оно истинно, увеличиваем счетчик на 1 . - person Amitkumar Satpute; 09.10.2016
comment
Спасибо за объяснение. Я протестировал ваше решение в командной строке и могу подтвердить, что оно работает, однако мне придется настроить его, чтобы иметь возможность возвращать начальные значения вместо их печати. - person famguy74; 09.10.2016
comment
у тебя есть решение? :) - person Amitkumar Satpute; 09.10.2016