Python, дающий TypeError: count принимает по крайней мере * аргумент, даже если аргументы даны - PullRequest
0 голосов
/ 29 августа 2018

У меня есть следующий код, в котором я дал i в качестве аргумента cout (), но все равно получаю TypeError: count() takes at least 1 argument (0 given)

def is_isogram(s:str):
    for i in s:
        print(i)
        if( str.count(i) > 1): # specified argument , still getting error
            return False
        return True 

1 Ответ

0 голосов
/ 29 августа 2018

str.count(i) > 1 должно быть s.count(i) > 1, это исправит вашу ошибку.

Вы можете использовать for i in set(i): или collections.Counter для более эффективного решения вашей задачи:

>>> from collections import Counter
>>> s = 'abbc'
>>> Counter(s).most_common(1)[0][1] == 1
False

Тайминги:

s = 'abcdefghijklmnopqrstuvwxyzz'  # a worst case?

%timeit Counter(s).most_common(1)[0][1] == 1
13.2 µs ± 27.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit len(set(s)) == len(s)
1.33 µs ± 3.46 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%%timeit
for i in set(s):
    if s.count(i) > 1:
        break
1.72 µs ± 17.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%%timeit
for i in s:
    if s.count(i) > 1:
        break
6.78 µs ± 14.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
...