Solution: count digits
examples/lists/count_digits.py
numbers = [1203, 1256, 312456, 98] count = [0] * 10 # same as [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] for num in numbers: for char in str(num): count[int(char)] += 1 for d in range(0, 10): print("{} {}".format(d, count[d]))
First we have to decide where are we going to store the counts. A 10 element long list seems to fit our requirements so if we have 3 0s and 2 8s we would have [3, 0, 0, 0, 0, 0, 0, 0, 2, 0].
- We have a list of numbers.
- We need a place to store the counters. For this we create a variable called counter which is a list of 10 0s. We are going to count the number of times the digit 3 appears in counters[3].
- We iterate over the numbers so num is the current number. (e.g. 1203)
- We would like to iterate over the digits in the current number now, but if we write for var in num we will get an error TypeError: 'int' object is not iterable because num is a number, but numbers are not iterables, so we we cannot iterate over them. So we need to convert it to a string using str.
- On each iteration char will be one character (which in or case we assume that will be a digit, but still stored as a string).
- int(char) will convert the string to a number so for example "2" will be converted to 2.
- count[int(char)] is going to be char[2] if char is "2". That's the location in the list where we count how many times the digit 2 appears in our numbers.
- We increment it by one as we have just encountered a new copy of the given digit.
- That finished the data collection.
- The second for-loop iterates over all the "possible digits" that is from 0-9, prints out the digit and the counter in the respective place.