Для подсчета вещей в списке python предоставляет в своем коллекционном модуле класс Counter-), похожий на dict: Doku , который считает вхождения в O (n) и предоставляет их в виде словаря.
from collections import Counter
L1 = ['newnes', 'imprint', 'elsevier', 'corporate', 'drive', 'suite',
'burlington', 'usa', 'linacre', 'jordan', 'hill', 'oxford', 'uk',
'elsevier', 'inc', 'right', 'reserved', 'exception', 'newness', 'uk', ...]
L2 = ['usa', 'uk', 'hill', 'drive', ... ]
c = Counter(L1)
print(c)
Выход:
Counter({'elsevier': 2, 'uk': 2, 'newnes': 1, 'imprint': 1, 'corporate': 1,
'drive': 1, 'suite': 1, 'burlington': 1, 'usa': 1, 'linacre': 1,
'jordan': 1, 'hill': 1, 'oxford': 1, 'inc': 1, 'right': 1, 'reserved': 1,
'exception': 1, 'newness': 1, Ellipsis: 1})
Предоставляет удобный метод для сортировки результата в виде списка кортежей (key, count)
с именем most_common () - если вы используете первое, вы получаете наиболее используемое слово, которое вы можете использовать вместе с понимание списка для изменения вашего списка источников:
word,_ = c.most_common()[0] # get word mos often used
# inplace modification of L1
L1[:] = [ x if x != word else "#"+word+"#" for x in L1] # use x if not the most used word
L2[:] = [ x if x != word else "#"+word+"#" for x in L2] # else pre-/append #
print(L1)
print(L2)
Выход:
['newnes', 'imprint', '#elsevier#', 'corporate', 'drive', 'suite', 'burlington',
'usa', 'linacre', 'jordan', 'hill', 'oxford', 'uk', '#elsevier#', 'inc',
'right', 'reserved', 'exception', 'newness', 'uk', Ellipsis]
['usa', 'uk', 'hill', 'drive', Ellipsis]
Порядок элементов в Counter
относится к порядку в исходном списке, вы получили несколько элементов со счетом 2 в L1
- elsevier
- первый из них, следовательно, он также первый, когда используя most_common()
Редактировать 4 комментария:
from collections import Counter
L1 = ['newnes', 'imprint', 'elsevier', 'corporate', 'drive', 'suite',
'burlington', 'usa','imprint', 'linacre', 'jordan', 'hill', 'oxford', 'uk','uk',
'elsevier', 'inc', 'right', 'reserved','imprint', 'exception', 'imprint','newness', 'uk', "..."]
L2 = ['usa', 'uk', 'hill', 'drive', "..."]
c = Counter(L1)
substs = "#*+~-:;=)(/&%$§!"
i = 0
for word,count in c.most_common():
temp = substs[i]*count # use the i-th char as substitute, apply it count times
L1[:] = [ x if x != word else temp+word+temp for x in L1] # use x if not the most used word
L2[:] = [ x if x != word else temp+word+temp for x in L2] # else pre-/append #
i += 1
i = i % len(substs) # wrap around
print(L1)
print(L2)
Выход:
['~newnes~', '####imprint####', '++elsevier++', '-corporate-', ':drive:', ';suite;',
'=burlington=', ')usa)', '####imprint####', '(linacre(', '/jordan/', '&hill&',
'%oxford%', '***uk***', '***uk***', '++elsevier++', '$inc$', '§right§', '!reserved!',
'####imprint####', '#exception#', '####imprint####', '*newness*', '***uk***',
'+...+']
[')usa)', '***uk***', '&hill&', ':drive:', '+...+']