Transcript from the "Practice: Advanced Data Types" Lesson
[00:00:05]
>> Nina Zakharenko: Let's look at our lists, so that would be this exercise right here.
>> Nina Zakharenko: So if I had a new list with the characters,
>> Nina Zakharenko: Of hello. Can look at it, I can append something to my list. Where does append insert the that new value?
>> Student: At the end of the list.
[00:00:42]
>> Nina Zakharenko: At the end, that's right. We can look at the length of my list.
>> Nina Zakharenko: And we can do a little bit of list slicing. So, I mentioned earlier that you can access items in a list by position. There's something called slicing that lets you access more than one item in the list at a time.
[00:01:16] So if I wanted to access the first few items, let's put 3 here, that would give me back the items from position 0 to position 3.
>> Nina Zakharenko: I can also optionally, if I'm looking at the beginning or the end, I can leave off one of these values. So if this is not present then,
[00:01:41]
>> Nina Zakharenko: It does the same thing that's kind of the inferred value. And,
>> Nina Zakharenko: Negative indexing is possible too. So if I wanted to look at the very last item in the list, I would use index -1.
>> Nina Zakharenko: There are a few other ways of interacting with our list.
[00:02:08] I can call remove on the list in person the string out, will that remove all of the instances of l?
>> Student: The first instance.
>> Nina Zakharenko: Just the first one, that's right. I can also insert,
>> Nina Zakharenko: Don't forget, like I did, where I got an error that you have to pass a position to insert a required argument.
[00:02:42]
>> Nina Zakharenko: So I talked about popping. But there's another way of deleting items from a list, and that's with the del keyword. And you can say delete the item at my_list 0,
>> Nina Zakharenko: And it'll be gone. Personally I really don't like this type of syntax, it doesn't really fit in with the other data types that we looked at.
[00:03:13] It's kind of there you might see it in other Python code, but I recommend not using it. Or we could just pop,
>> Nina Zakharenko: The last item on the list. Optionally we can pass an argument into pop, and that would be the position to pop from.
>> Nina Zakharenko: We can see if a particular value is in my list with the in keyword, it's not.
[00:03:46] And we can sort in place with my_list.sort(reverse=True), oops. Reverse=True, and now we'll see my list is sorted in reverse order. Remember that calling .sort doesn't return anything. If we wanted a copy instead of modifying the list in place, we would call sorted on my_list, and also parse in the reverse=True argument.
[00:04:24] Okay, working with sets.
>> Nina Zakharenko: Remember that tape of empty brackets is a dictionary, to make a new set we need to use the set constructor
>> Nina Zakharenko: We can check that with type or just look at the variable and see that it's a set. We can add items to our set, or we can just override it with a non-empty,
[00:04:57]
>> Nina Zakharenko: With some values. I can, oops, sorry. I can add a value to it. I can also remove,
>> Nina Zakharenko: A value from it. Okay, so that's mutable. I can also test for membership with the in keyword
>> Nina Zakharenko: Unlike with less, every item in the start has to be unique.
[00:05:28] So if I have my_set and I try to add 3 to it again, we'll see that it's only in there once. Looking at some set operations, making a new set
>> Nina Zakharenko: Oops, I now wanted to call it my_other_set, so let me fix that. We can combine the two sets with a union.
[00:05:55] We use the symbols before but we can also use the methods.
>> Nina Zakharenko: So that's all of the items that are in both. We can get the difference.
>> Nina Zakharenko: So,
>> Nina Zakharenko: What's the value that is in both? Or we can get the intersection.
>> Nina Zakharenko: So, these are the values that are unique to each set.
[00:06:32] Each set already had four in it. Okay, looking at tuples, we know that we can't make a one item tuple with just parentheses, we know that we need to insert a comma there.
>> Nina Zakharenko: So let's make a new tuple.
>> Nina Zakharenko: What happens if we try to add or change a value in our tuple.
[00:07:05] Is this possible? It's not. Tuples are immutable, does not support item assignment. Let's make a new person. Jim, Jim has an age, he's 29 and he lives in Austin, Taxes. We can use tuple unpacking,
>> Nina Zakharenko: To quickly pull out all of the values in a tuple and assign variables to them.
[00:07:33] Now we can look at Jim's name, age and hometown. For dictionaries, remember, they kind of use those curly braces just like a set, but instead it contains key value pairs. The key value is separated with a colon, and each key value pair is separated with a comma. What happens if we try to get the item at position zero in our dictionary?
[00:08:04]
>> [INAUDIBLE]
>> Nina Zakharenko: Unless key zero happens to be there, but dictionaries do not have an order. Okay, let's add a few more items in our dictionary.
>> Nina Zakharenko: And we can take a look at it here. Now there are three items, to get the value for the key Hello, I would use the square bracket like I would for a list access.
[00:08:42] But instead of putting in a position, I would put in a key.
>> Nina Zakharenko: I can also use the mideck.get for a key. What is the difference between using the square brackets to access a key in a dictionary and using .get?
>> Student2: Once you use the key, error that t comes back, or lack of an error.
[00:09:06]
>> Nina Zakharenko: Yeah,lack of an error. So if I use .get on a key that is not in my dictionary, I will not get an error, whereas I will if I use the square. So my dictionary doesn't have baz in it, right? I will get a key error for baz, but if I use my_dict.get("baz") no error.
[00:09:31] And I can also provide a default value to get. So if I call get on a key that's no there, I will get the default value back. If I call get on a key that is there, what result will I see?
>> Student3: The key that's there.
>> Nina Zakharenko: Or the value.
[00:09:51]
>> Student3: The value.
>> Nina Zakharenko: The value for the key that's there, right? So, remember dictionaries are key value pairs, so I can look at dictionary keys, I can look at the dictionary values. Oops, I made a typo not value but values. But if I wanna look at the key value pairs at once, I will need to look at items.
[00:10:17] Now we'll return into data structure that kind of look like a list, but it basically contain the sequence of tuples. And we'll use that later with tuple unpacking when we talk about looping. Very quickly, mutability.
>> Nina Zakharenko: Okay, lists are mutable.
>> Nina Zakharenko: We'll see that the value changed. Dictionaries are also mutable.
[00:11:04]
>> Nina Zakharenko: To add a new key, her foo, and the value is bar. Okay, sets are also mutable.
>> Nina Zakharenko: But we can't change our set with,
>> Nina Zakharenko: With the index here. Why is that?
>> Student3: Because it's.
>> Student: Not ordered.
>> Nina Zakharenko: It's not ordered.
>> Nina Zakharenko: Okay, I can use .add, .remove, and .discard.
[00:11:45] Tuples on the other hand are immutable.
>> Nina Zakharenko: So if I try to change, I can do this, right? I can look at the first item in my tuple that index 0. But if I try to change it, when I get an error, the tuple object does not support item assignment.