TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

Python Len, String Length Examples and Performance

This Python 3 article explores the len method on strings. Len returns the length of a string, dictionary, list, set or tuple.

Len. All things have lengths. Even our universe, in constant expansion, has a length.

In Python though we mostly measure the lengths of strings, lists, collections—not universes.

We use len. Often we can optimize performance with len. The number of elements is stored on the object, not calculated, so len is fast.

Strings. Len returns the number of characters in a string. It counts spaces, punctuation, all characters the same. We must be careful with taking the len of a None variable—this fails.

Empty: The second len call tests an empty string. This string has zero characters but is not None.

TypeError: Len relies on the type of the variable passed to it. A NoneType has no len built-in support.

None

Based on:

Python 3

Python program that uses len on strings

# Has length of 3:
value = "cat"
print(len(value))

# Has length of 0:
value = ""
print(len(value))

# Causes TypeError:
value = None
print(len(value))

Output

3
0
Traceback (most recent call last):
  File "C:\programs\file.py", line 13, in <module>
    print(len(value))
TypeError: object of type 'NoneType' has no len()

Collections. The len built-in returns the number of elements in a collection. For a collection with nested, sub-collections, counting is shallow: not all nested elements are considered.

Dictionary: For the dictionary, each pair is counted as one unit. Keys and values are not independent.

Dictionary

Python program that uses len, collections

# Get length of list with len.
elements = [1, 2, 3]
print(len(elements))

# Get length of tuple.
items = ("cat", "dog", "bird", "shark")
print(len(items))

# Length of example set (key count).
set = {100, 200, 300}
print(len(set))

# Length of dictionary (pair count).
lookup = {"cat" : 4, "centipede" : 100}
print(len(lookup))

Output

3
4
3
2

Nested lists. Let us revisit nested collections. A collection itself is an element, so it counts just one time. The len built-in does not recurse. It does not even loop. It is simple.

Recursion

So: We must do those things (recurse, loop) with custom code. We can test sub-elements and use len on them.

List

Python program that uses len on nested list

# A nested list:
list = [1, 2, [4, 5]]

# Shallow count of elements.
print(len(list))
print(len(list[2]))

Output

3
2

Error. We cannot just take the len of any variable. This program attempts to take the length of an int variable. And it fails, miserably, with a TypeError that ends its operation.

Note: Conceptually len() counts countable units: chars in a string, elements in a list. A number has digits, but no other "units."

Numbers

Python program that causes error, len on int

value = 100

# Cannot take length of int:
length = len(value)

Output

Traceback (most recent call last):
  File "C:\programs\file.py", line 6, in <module>
    length = len(value)
TypeError: object of type 'int' has no len()

Performance. The len of collections and strings is stored as a number in memory. It is not computed, as in a loop, each time it is accessed. For this reason, len is much faster than a loop.

Here: I access the length of a string with len in a loop. This is timed. I then test a for-loop version.

Result: It is many times faster to access len. The for-loop is useful only when counting chars, where their values matter.

Python program that times len, char counting

import time

value = "characters"

print(time.time())

# Version 1: len
for i in range(0, 1000000):
    length = len(value)
    if length != 10:
	raise Exception()

print(time.time())

# Version 2: count chars
for i in range(0, 1000000):
    length = 0
    for c in value:
	length += 1
    if length != 10:
	raise Exception()

print(time.time())

Results

1406752804.325871
1406752804.606887    len      = 0.281 s
1406752806.05097     for-loop = 1.444 s

A summary. A length cannot be negative. So we can use len as a loop boundary: this is a convenient way to loop over a list. But when not needed, avoiding len is ideal.

Loop suggestion. Consider a for-in loop to avoid using len. This loop construct will enumerate each element in a collection. No indexes are needed.


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf