In this exercise, count() is used to find the number of items in a list. If the item being counted isn’t in the list, will count() return an error?
Answer
No, count() will not return an error if the item passed to the function is not found. The count() function will return a value of 0. This is shown in the example code below. The first two items passed to count() are present in the vehicles list. The third item is not present in the list at all.
vehicles = ['car', 'truck', 'car', 'van', 'car', 'van']
# Returns value of 3
cars = vehicles.count('car')
# Returns value of 2
vans = vehicles.count('van')
# Returns value of 0
suvs = vehicles.count('suv')
How can we count the number on the basis of an element of sublist?
For example,
List = [[“Sam”,12] , [“Ron”, 17], [“Josh”, 12]]
and we need to count how many of them are aged 12.
You have a variety of choices regarding how to do this. The following demonstrates the technique of unpacking the elements of inner lists within a for loop:
friends = [["Sam", 12], ["Ron", 17], ["Josh", 12]]
def age_count(people, age_to_count):
count = 0
# unpack people[0], people[1] into name, age
for name, age in people:
if age == age_to_count:
count += 1
return count
print(age_count(friends, 12))
Output:
2
Edited on May 27, 2019 to add the following:
If you would like, instead, to use the list.count() method that is the subject of the exercise, you can unpack name and age within a list comprehension, then count the cases where age is equivalent to 12 within the resulting list, as follows:
friends = [["Sam", 12], ["Ron", 17], ["Josh", 12]]
age_12_count = [age for name, age in friends].count(12)
print(age_12_count)
Hello appylpye, i would like your help once again.
def two_euro_slices(pizzas_by_price,two_euro_pizza):
count = 0
for type_of_pizza,price in pizzas_by_price:
if price == two_euro_pizza:
count +=1
return count
As you see i tried to use the piece of code you wrote first, when i needed it for an exercise in codecademy(i didn’t copy paste it, first i spend my time trying to understand how it works and then i used it.) Anyway it helped a lot!
The only thing that keeps troubling me till this moment is this:
As you see the return command is exactly below the for.
When it is typed like this everything works fine as it’s supposed to.
But, when i accidentaly moved it a little, for example:
def two_euro_slices(pizzas_by_price,two_euro_pizza):
count = 0
for type_of_pizza,price in pizzas_by_price:
if price == two_euro_pizza:
count +=1
return count
when i put it under the count , the whole result is changing.
on the first example it returned 3, which was correct, as i was trying to count the pizza slices that cost 2 euros from a list with pizza types.
but on the second example it returned 1, and i have absolutely no clue about how this worked!
In other words, once return is reached one time, the function halts (and actually disappears from the call stack - Python’s “active memory” - along with all of its variables.)
if price == two_euro_pizza:
count +=1
return count
Considering what @patrickd314 wrote about return statements, what happens the first time within the for loop that the condition within the if block header evaluates to True? Also, what would happen if it did not evaluate to True during any of the loop iterations?
ok i think i get it, correct me if i’m wrong please.
what you are saying is that it prints “1” because once it finds that there is one slice of pizza that costs 2 euros, it stops. right?
Yes, if during any iteration of the for loop, the condition in the if block header becomes True, the code within the if block executes. Accordingly, the value of count increases to 1. Then the return statement executes, which returns that value and terminates execution of the two_euro_slices function.
What happens if none of the pizza slices have a price of €2? In that case, the value 2 does not appear in the pizzas_by_price list at all, and the returned value should be 0. However, the for loop executes all of its iterations, going through the entire list, without the if block condition’s ever evaluating to True. After the loop has completed all of its iterations, the value of count is still 0, which is fine, but there is no return statement after the loop. Control reaches the end of the function’s statements, and by default, None is returned. With there being no €2 slices, 0 would be more appropriate as a returned value.
The first of the two versions of your function produces a correct result , provided that appropriate arguments are passed to it. In fact, since the name of the function reveals that it was specifically written for the purpose of counting €2 slices, the second argument would presumably always be 2. On that basis, the second parameter, two_euro_pizza, should be eliminated to simplify the function, as follows:
def two_euro_slices(pizzas_by_price):
count = 0
for type_of_pizza, price in pizzas_by_price:
if price == 2:
count +=1
return count
You could, instead, rename the original version of the function, so that it is appropriate for counting pizzas of whatever price is passed to it as the second argument.
In the unit on Lists and Dictionaries we cover the concept of comprehensions which are loop constructs contained in a data structure body. The loop above iterates over an object consisting of value pairs. The first value is given as a name, and the second as an age. Each pair is polled and the age value is appended to the list.
The resulting list will consist of only the ages, [12, 17, 12].
i = 0
a = 0 #variable a count how many of them are age 12
age = 12
for data in List:
if age in List[i]:
a += 1
i += 1
print (a) #print how many are age 12
I enjoyed solving this for myself, so I thought I’d post it.
I find it easier to differentiate the "i’ in any loop, “e” stands for element, and “n” for number in range, etc
def dedupe(mylist):
for e in mylist:
for n in range(mylist.count(e) -1):
mylist.remove(e)
return mylist
print(dedupe(mylist))
mylist = [1, 1, 2, 3, 3, 3, 2, "True", "True", False, False, 5.1, 5.1]
def dedupe(mylist):
for e in mylist:
for n in range(mylist.count(e) -1):
mylist.remove(e)
return mylist
print(dedupe(mylist))
Short answer, no. Each list has its own ‘count’ attribute just as each list has its own len(). To count nested lists, they first need to be isolated and their .count() method invoked.