Как я могу найти несколько элементов в списке Python? - PullRequest
2 голосов
/ 14 мая 2019

Я хочу написать программу, чтобы узнать, сколько [a,b,c] в [a,a, b,c,d,a,a,b,c,c,d,d,d].

Я хочу получить ответ 2.

В списке четыре a's, но b равно 2, а c равно 3. Поэтому я хочу получить минимальное количество [a,b,c]

Ответы [ 7 ]

5 голосов
/ 14 мая 2019

Вот один из подходов:

l = ['a','b','c','d','a','a','b','c','c','d','d','d']
seq = ['a','b','c']

sum(1 for i in range(len(l) - len(seq)-1) if l[i: i + len(seq)] == seq)
# 2

Где на каждой итерации мы сравниваем срез или окно из l с seq и возвращаем 1, если они равны. Следовательно это производит следующие кусочки:

[l[i: i + len(seq)] for i in range(len(l) - len(seq)-1)]

[['a', 'b', 'c'],
 ['b', 'c', 'd'],
 ['c', 'd', 'a'],
 ['d', 'a', 'a'],
 ['a', 'a', 'b'],
 ['a', 'b', 'c'],
 ['b', 'c', 'c'],
 ['c', 'c', 'd']]

Или мы также можем использовать join для преобразования обоих списков в строки и затем использовать str.count:

''.join(l).count(''.join(seq))
# 2
3 голосов
/ 14 мая 2019

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

Идея состоит в том, чтобы рассчитать количество всех элементов в списке и взять минимальное количество ключей a,b,c

from collections import Counter
l = ['a','b','c','d','a','a','b','c','c','d','d','d']
seq = ['a','b','c']

#Create counter of list
c = Counter(l)
#{'d': 4, 'a': 3, 'c': 3, 'b': 2}
#Take minimum count from counts of keys a,b and c
result = min([c[key] for key in seq])
print(result)

Результат будет 2

3 голосов
/ 14 мая 2019
abc = ['a', 'a', 'b', 'c', 'd', 'a', 'a', 'b', 'c', 'c', 'd', 'd', 'd']
min([abc.count(i) for i in  ['a', 'b', 'c']])
0 голосов
/ 14 мая 2019

Вот один простой способ сделать это: abc = ['a', 'a', 'b', 'c', 'd', 'a', 'a', 'b', 'c', 'c', 'd', 'd' , 'd'] min ([abc.count (i) для i in ['a', 'b', 'c']])

0 голосов
/ 14 мая 2019

c = ['a', 'b', 'c'] cc = ['a', 'a', 'b', 'c', 'd', 'a', 'a', 'b', 'c', 'c', 'd', 'd' , 'd'] * * +1001

result = {}
for i in c:
    res = cc.count(i)
    chec_res = {i:res}
    result.update(chec_res)

Min_val = min(result.keys(), key=(lambda m: result[m]))
0 голосов
/ 14 мая 2019

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

from collections import defaultdict
dic=defaultdict(int)
l=[a,a, b,c,d,a,a,b,c,c,d,d,d]
seq=[a,b,c]

for i in l:
    dic[i]+=1

sol = min([dic[i] for i in seq])

print(sol)
0 голосов
/ 14 мая 2019

Вы также можете попробовать Counter.

>>> from collections import Counter
>>> 
>>> l = ['a','b','c','d','a','a','b','c','c','d','d','d']
>>> counter = Counter(l)
>>> 
>>> min(counter['a'], counter['b'], counter['c'])
2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...