DEV Community

John Au-Yeung
John Au-Yeung

Posted on

Many Things You Can Do With Python Lists You May Have Missed

Subscribe to my email list now at http://jauyeung.net/subscribe/

Follow me on Twitter at https://twitter.com/AuMayeung

Many more articles at https://medium.com/@hohanga

Even more articles at http://thewebdev.info/

Python is a convenient language that’s often used for scripting, data science, and web development.

In this article, we’ll look at the many things that we can do with Python lists.

Sorting the Values in a List with the sort() Method

We can use the list sort method to sort a list. It works with any object, including strings and numbers.

For example, we can use it as follows:

fruits = ['apple', 'orange', 'orange', 'grape', 'pear']  
fruits.sort()

The sorting is done in place. So it sorts the list that it’s called on.

Therefore, we get:

['apple', 'grape', 'orange', 'orange', 'pear']

as the new value of fruits.

With numbers, we can write:

nums = [5,3,4,6,7]  
nums.sort()

Then the new value of nums is:

[3, 4, 5, 6, 7]

We can’t sort lists that have mixed data types.

For example, the following list:

mixed = ['apple', 'orange',3,2,1]  
mixed.sort()

We’ll get:

TypeError: '<' not supported between instances of 'int' and 'str'

since sort can’t compare the entries.

Reversing the Values in a List with the reverse() Method

The reverse method reverses a list in place. It can also be done with string and number arrays.

For instance, we can write:

fruits = ['apple', 'orange', 'orange', 'grape', 'pear']  
fruits.reverse()

Then the new value of fruits is:

['pear', 'grape', 'orange', 'orange', 'apple']

Likewise, we can do the same with a number list:

nums = [5,3,4,6,7]  
nums.reverse()

Then we get:

[7, 6, 4, 3, 5]

as the new value of nums.

Emptying a List with clear()

We can call clear on a list to clear all entries from a list.

For instance, we can call it as follows:

nums = [5,3,4,6,7]  
nums.clear()

Then we get that the new value of nums is an empty list.

Remove the Last Element of a List with pop()

We can call pop on a list to remove the last item off a list.

For instance, we can write the following:

nums = [5,3,4,6,7]  
nums.pop()

to remove 7 from nums.

Counting the Number of Times an Item Appears on a List with count()

The count method takes an element that we want to search for in a list.

For instance, we can use it as follows:

fruits = ['apple', 'orange', 'orange', 'grape', 'pear']  
orange_count = fruits.count('orange')

orange_count should be 2 since 'orange' appeared twice on the list.

Shallow Copying a List with copy()

The copy method creates a shallow copy of the array it’s called on and returns it. This is the same as a[:].

A shallow copy means only the top-level items are copied. Nested items are still referencing the original items.

For instance, given that we have the following code:

fruits = ['apple', 'orange', 'orange', 'grape', 'pear']  
fruits_copy = fruits.copy()  
fruits_copy.append('banana')

We should see that the value of fruits is:

['apple', 'orange', 'orange', 'grape', 'pear']

and the value of fruits_copy is:

['apple', 'orange', 'orange', 'grape', 'pear', 'banana']

This is because we made a copy of the fruits list by calling copy. Therefore, fruits_copy is referencing a new list with the same entries as fruits in the second line.

List Comprehensions

We can use the list comprehension syntax to create a list by mapping list items by calling a function to do the mapping.

For instance, we can write:

cubes = [x**3 for x in range(10)]

to create an array with each entry a cube of the entry returned from range(10) .

Therefore, we should get:

[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]

as the value of cubes since 0**3 is 0, 1**3 is 1, 2**3 is 8, and so on.

We can also use it to returns a new list with some items filtered out as follows:

nums = [-3,5,6]  
positive_nums = [x for x in nums if x > 0]

The code above takes all the numbers that are bigger than 0 on the list and returns it.

Therefore, we should get:

[5, 6]

as the value of positive_nums.

Conclusion

Python lists have lots of methods to do various operations.

We can sort lists with sort, remove the last item from a list with pop, count the number of items we’re looking for with count, and empty a list with clear.

Python also has the list comprehension syntax to generate a list from another list.

Top comments (12)

Collapse
 
waylonwalker profile image
Waylon Walker

Great post, I had no idea there was a clear() method. You're missing out on one of my favorite features though! The * operator. I commonly use it along side list comprehensions.

For example take a pandas DataFrame and get all of the columns that include "price" in their name.

df_prices = df[col for col in df.columns if 'price' in col]
Collapse
 
aumayeung profile image
John Au-Yeung

Thanks for reading.

You mean make a filtered list with lost comprehension?

Or you mean using * to repeat items?

Collapse
 
waylonwalker profile image
Waylon Walker • Edited

Lol, good catch. 😳 I think I took a break between the comment and finding a good example. Here is a real example of nearly the same thing if the DataFrame was a pyspark DataFrame. pyspark.select takes in column names as *args df.select('us_price', 'eu_price')

They can be selected programatically with a list comprehension and *unpacking.

df_prices = df.select(*[col for col in df.columns if 'price' in col])
Thread Thread
 
aumayeung profile image
John Au-Yeung

I see. The list comprehension is used as a predicate?

Thread Thread
 
waylonwalker profile image
Waylon Walker • Edited

Not sure what you mean by predicate, the list comprehension is a filter.

price_cols = [col for col in df.columns if 'price' in col]
df_prices = df.select(*price_cols)

Here is a generally relatable example using the print statement

[ins] In [1]: fruits = ['apple', 'orange', 'orange', 'grape', 'pear']

[ins] In [2]: print(fruits)
['apple', 'orange', 'orange', 'grape', 'pear']

[ins] In [3]: print('apple', 'orange', 'orange', 'grape', 'pear')
apple orange orange grape pear

[ins] In [4]: print(*fruits)
apple orange orange grape pear

[ins] In [5]: print(*[fruit for fruit in fruits if 'p' in fruit])
apple grape pear
Thread Thread
 
aumayeung profile image
John Au-Yeung

That makes sense. I haven't seen this documented in many places. That's probably why I missed this.

Collapse
 
maximus06 profile image
Maximus06

Thanks John for this nice summary on the list. I think you forget a banana in the print of fruit_copy after fruit_copy.append('banana') and I like the bananas ;)

Collapse
 
aumayeung profile image
John Au-Yeung

Thanks so much for reading and catching that mistake. I corrected it now.

Collapse
 
chachan profile image
Cherny

what's the difference between l.count() and len(l)?

Collapse
 
aumayeung profile image
John Au-Yeung

There's no difference.

Collapse
 
kedark profile image
Kedar Kodgire

I guess there is a huge difference between them

  • count returns the number of occurrences of a particular element in the list
  • length returns the length of the list

check the example below

>>> vowels = ['a', 'e', 'i', 'o', 'i', 'u']
>>> vowels.count('a')
1
>>> len(vowels)
6
Thread Thread
 
aumayeung profile image
John Au-Yeung

Yes. You're right