4 svar
161 visningar
Qetsiyah 6567 – Livehjälpare
Postad: 1 sep 2022 23:44 Redigerad: 1 sep 2022 23:46

Ta reda på längd av sträng utan len()

Hej, jag har fått en (enligt mig) lite konstig uppgift, nämligen att ta reda på längd av sträng utan len(), det här är det enklaste sättet jag kan komma på, finns det andra elegantare sätt?

Tigster 271
Postad: 1 sep 2022 23:53 Redigerad: 1 sep 2022 23:54

def myLen(someString: str):

       len = 0

       for x in someString:

              len += 1

       return len

Kanske? :)

Qetsiyah 6567 – Livehjälpare
Postad: 2 sep 2022 00:03 Redigerad: 2 sep 2022 00:04

Jaha ojdå vad jag övertänkte! Tack

Men en fråga, finns det någon typ mindre resurskrävande operation istället för att assigna till dummy för att testa om jag är utanför längden av strängen i min kod ovan?

Fermatrix 7841 – Fd. Medlem
Postad: 2 sep 2022 11:38

Har har du ett par förslag, vissa lite mer överkurs än andra.

print(sum(map(lambda x:1, "1234567")))

Sedan kan man också göra det rekursivt:

def get_string_length(s):
    return 1 + get_string_length(s[1:]) if s else 0

och liknande den första där vi använda lambda så kan vi göra det utan,

sum(1 for x in "aWord")
CurtJ 1183
Postad: 4 sep 2022 20:46 Redigerad: 4 sep 2022 20:48

Din tilldelning är inte så resurskrävande men du kan göra den lite mer effektiv genom att tilldela en lokal variabel i stället för din dummy. Det är ju själva tilldelningen som är poängen.

Dracaenas förslag är ju lysande, speciellt det sista så det finns egentligen inget att tillägga men under avdelningen "Skruvade sätt att räkna bokstäver" bidrar jag med följande för att ytterligare visa att det finns många sätt att lösa en uppgift.

import re 

def skruvat_sätt_att_räkna_tecken():
   x = re.search(r".*", s)
   return x.span()[1]
Svara
Close