Как считать символы в строке без пробелов, используя python? - PullRequest
2 голосов
/ 01 апреля 2020

Я создал функцию, которая будет подсчитывать количество символов в строке, но также и пробелы.

Вот мой код:

def count_characters_in_string(mystring):
    string_1 = mystring
    print("The number of characters in this string is:", len(string_1))
count_characters_in_string("Apples and Bananas")

Есть ли способ не считать пробелы?

Ответы [ 6 ]

3 голосов
/ 01 апреля 2020

Этот не создает ложные list или str в памяти, используя sum, str.isspace и тот факт, что issubclass(bool, int):

def count_characters_in_string(mystring):
    return sum(not c.isspace() for c in mystring)
1 голос
/ 01 апреля 2020

Вы можете split строку (без указания разделителя означает разделение в соответствии с любым пробелом), а затем суммировать длины получаемых строк

def count_characters_in_string(string):
    return sum([len(word) for word in string.split()])

print("The number of characters in this string is:", count_characters_in_string("Apples and Bananas"))

РЕДАКТИРОВАТЬ : следуя полезному совету @schwobaseggl, я создал 3 версии функции и рассчитал их, чтобы выяснить, что опция map на самом деле самая быстрая

def count_characters_in_string(string):
    return sum([len(word) for word in string.split()])

def count_characters_in_string_gen(string):
    return sum(len(word) for word in string.split())

def count_characters_in_string_map(string):
    return sum(map(len, string.split()))


%timeit count_characters_in_string("Apples and Bananas")
718 ns ± 21.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit count_characters_in_string_gen("Apples and Bananas")
812 ns ± 13.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit count_characters_in_string_map("Apples and Bananas")
607 ns ± 19.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
0 голосов
/ 01 апреля 2020

Одним из решений может быть итерация по символам и проверка, если это не пробел, затем увеличить счетчик, как показано ниже:

def count_characters_in_string(mystring):
    count = 0
    for x in mystring:
        if x !=' ':
            count+=1
    return count

res = count_characters_in_string("Apples and Bananas")
print(res)
0 голосов
/ 01 апреля 2020

Что вы думаете о len из list comprehension?

def count_characters_in_string(mystring):
    return len([character for character in mystring if character.isalpha()])
0 голосов
/ 01 апреля 2020

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

string1 = "asd asd asd asd asd"
string2 = string1
string2.replace(" ", "")
size1 = len(string1)
size2 = len(strgin2)
size3 = size1 - size2

ура

0 голосов
/ 01 апреля 2020

Используйте это:

def count_characters_in_string(input_string):

    letter_count = 0

    for char in input_string:
        if char.isalpha():
            letter_count += 1

    print("The number of characters in this string is:", letter_count)

Это также работает:

def count_characters_in_string(input_string):

    letter_count = len(input_string.replace(" ",""))

    print("The number of characters in this string is:", letter_count)

При запуске:

count_characters_in_string("Apple Banana")

Будет выведено:

"The number of characters in this string is: 11"
...