Google Python Class Day 1 Part 2


>>PARLANTE: This morning, I talked about
strings, they’re just the most basic stuff, and then we had the string exercises. So the
time for the rest of the day I’m going to talked about lists and tuples, what are their
structures. We’ll have–had a little exercises about that, and then I’ll finish off talking
about dictionaries and files, chart tables, and then we’ll have a large exercise, and
that will complete the day. So that’s in line for today. I’ll probably get you out here
around, I don’t know, 4:15 or some like that. All right. So let’s talk about another Python
type, so let’s fire up the interpreter here. So I did strings. So the next topic I’m going
to show you is the lists. So the lists is in a–appears in square brackets. So if I
wanted a lists of like the numbers one, two, three, that will look like that, like–I mean
I could tie it into a variable to make it very much like my last example. The elements
in a lists, they often are of the same type but there’s no requirement, so I could have
like “1, 2,” and then like “aaaa”,–oops, okay. That’s probably–oh, three commas. I’m
sorry. So, it’ll give a list of a, you know, different types. In reality, mostly, you’ll
have a list of all the same thing for just, you know, just sort the most intuitive case.
Now, Python has this sort of design idea that instead of having, you know, one syntax for
strings and another syntax for list or whatever, Python tries to use the one syntax very consistently
for all things, and so this is a nice quality. It means when you’re learning it, there’s
less to memorize. So, for example, the length function for lists is just the one we learned
before. So, yeah, I could say “lan(a)”, just like for strings. And in fact, many of the
bits of syntax or operations for strings were countless as well. And so Pythons are deliberately
consistent. So, for example, I could do a “+”. So I could say, well, I have the list
“[1, 2, “aaaa”], you know, “+ [3, 4]”. And like with strings, we’ve seen that, right?
It puts them together to make a bigger string. With list, they’re like, put some together
to make a bigger list. So one difference that list have–I’ll set this back to “a=[1,
2, 3]. Is what is–what is the equals to? So if I say “b=a”, “end. The key thing to
remember here is this does not make a copy. What this has done is there’s this one list
sitting in memory somewhere, and it used to be that “a” was pointing to it; and now, “b”
is pointing to that same list. So there’s one list, and they’re both pointing to it.
The way you could tell, all right, we do a little experiment–oh, I’m sorry; I really
didn’t to talk about. How do you refer to the–an element inside of here? Yeah, it’s
just like, just like in the string. So, if I say “a [0]”, that’s the first element, remember?
So I can check my experiment by using this on the right hand, so I’ll say, well, I’ll
set “a[0]=13”. I’m going to change that first element; lists are mutable, you can
change them. Unlike strings, Strings are the ones that don’t’ change. So if I look at “a”,
it’s now different. But if I look at “b”, it’s different also. So this kind of shows
how they were just pointing to the one thing. If you want to make a cut–mostly, you’re
just having the one list or whatever it is, and having pointers sort of sprinkle through
your [INDISTINCT] all pointing, all sort of–I could say, sharing that data structure. For
most part, that’s just totally fine. You shouldn’t–[INDISTINCT] block that out. I will show you how to make
a copy, just if you wanted to. The way you make a copy–or actually, I’ll set “b” to
be a copy of “a”–is of you–the Pythonic way is use slice syntax. So if you say, “[:]”
that’s the kind of Pythonic way of saying, “Well, here’s a linear quantitative things.
Please make a copy of it.” So, now “b” relays a copy if I change “a” and “b” would change.
Yeah? Question over here?>>So the question was, if you’ll be framing
a copy for me to change “b” and also change anything…?
>>PARLANTE: Yeah. So the question is question is, so before I made I copy, if I change “b”
or if it’s “a”? Yes. So there’s this one list in memory, they’re both pointing to it. They’re
literally sharing it. Now, I’m going to say, “Look, as a practical matter for your Python
programs, there’s just not a problem. It’s just fine.” In C++ or in C, you would want
to make copies mainly because of the memory management, like trying to know when to free,
you know, when to reclaim the memory. But Python, like, you know, any reason about language
has a garbage collector. It just takes care of the memory collection, and so as a result,
this need to make copies, just kind of goes where–when I found transitioning from CC++
language is, to Python I found that it was making a lot of your copies, likes the need
do that had just gone away. So I guess what I’m saying is like, you may have an instinct
to make copies, where I’d say, attempt to keep in check, the key you’ll find, it just
not make copies and most stuffs just going to work fine. All right. So let’s see we got
the square brackets, the length, the–let’s see, what are “a” and “b” this days? Oh, they’re
the same. The “==” does comparisons just like string. So you have two lists. It actually
follows the list and checks piece by piece, which are the same. So as before, it does
have a kind of an intuitive notion of checking. Now, what’s the other thing we did lists,
right, or I’m with strings [INDISTINCT] was slices. That works with list as well. So right
here, I’ve got these lists. If I say “a”, you know, I don’t know what, [1:3] or whatever,
I can pull a slice out of the list. So for–maybe the most common case is, like, if I want to
talk about a list, except or without the right installment. So, I’ll wait until we get to
the exercises, but, yeah, you’ve got this very concise syntax for kind of talky about
some parts of a list. All right. So let me show you the main syntax for this thing. So
a very common thing to do–actually, I’m going to–I’ll write it over here and I’ll I speak
louder, a very common thing to do is to loop over a list. And so, in–for example in C,
or right, you’ve maybe written that loop where you say, you know, “for i=0, i>How does it know that numbers are also those numbers?
>>PARLANTE: Well, so let’s do it, so the question is how does it know that num is also
those numbers? What its doing is num is just a variable name just chosen by me, it could
have been anything, and what it does in the loop, essentially, what it’s doing inside
the loop is like num is equal to whatever, you know, kind of like, what the next value
is. It assigns it into num, just like a variable, and then after that, then it runs with a little
bit of code I have, and then it loops around and does the next one. So in other languages,
it might–it’s similar to the idea of an iterator. So, this is for–the exercises of this will
come up late. The idea that you have a list of a bunch of things and you kind of want
to do something for each one, that is–that’s a common case and this is certainly the syntax
you should use for that. There is a related syntax–this is like this is the first one.
The second one is very simple which is just–you have some value, and you want to, you want
to check if it is in a list, and you can imagine–I’m sorry, is this too low down? You guys can’t
see? Sorry. I’ll write it up above. I’ll put up here. Let’s stuck this here, all right.
If you want to check if a value is in a list, you can write this way. You just put whatever
the value is and then the word “in”; just the “in” by itself, and then whatever the
list is. So it’s very short. So, if you’ve got a–I mean, this works for list. It actually
works for a lot of things, just “in” in Python. There’s this built-in way that you’ve got
some composite data structure, and you want to tell, is this thing in here? So what’s
“a”? So, for example, I can just write “2 in a”, and that’s just going to go over “a”
figure out somehow, or with what something, like, let’s say the “14 in a”. There’s the
“False”. So there’s another one–this sort of higher in the food chain things, you might
have an instinct, “Oh, I want to see if it’s in here. Oh, I’m going to write a four loop,
and I guess I’ll loop through, and I’ll compare each one with equals, equals rarely.” I’d
be like, “no”. In Python, you’ve–it’s just built-in. You’ll say, “Look, is this in there?”
It works for actually a lot of data structures, and in–the [INDISTINCT] case it’s actually
quite efficient, you know. It does–it does something smart depending on what data structure
you have. So you should not worry about doing something with them. So, along with slices,
you should just–so I’d rather that you just go ahead and memorize those. Those two syntactic
constructs are very common, you should just know those. And, of course, my examples later
on, so up here all sorts of time. All right. So let me show you just as with the string,
we had methods like “.lower” and “.replace” and “.find”, whatever. The list is the same
way. It’s got all sorts of built-in stuff. I’m just going to show you a couple. One is
there’s an append–and you can just guess what that does. Just to–puts it on the end
there. One important thing about append is that it does not return a new list. It returns
the special value of none which I, you know, you saw in the [INDISTINCT] a little bit.
None upper case N–I’ll just type here–is sort of the null value. It means like nothing.
So, “a.append”, it returns nothing. What it does is it modifies the list. So, it does
not–it would be wrong to write this, “a =a.append(xx)”, you know, say, well, I have
to say no. I mean there is this follow the world where–I mean some other language maybe
that were, but in Python that just happens to not work at all. And it’s because append
does not return anything. It modifies the list in place, and that’s–I’ve absolutely
made that here myself. It’s just the–there’s this two different paradigms they could have
chose, and they chose the one right at that one. All right. Also, there’s a–it’s kind
of the reverse of append, there’s pop. And so if I–this is by position. So if I say,
“pop(0)”, what that’s going to do is it pop–it removes, it sure pops up the zero with element,
and returns it to me, and it modifies list. So, it kind of removes it from the list and
send it to you. So, you want to kind of remove an element and just kind of get it out of
there. Then, pop–pop [INDISTINCT]. And were–and, then you should look at the docs. Yes, there
are dozens of built-in list methods for all sorts of common stuff. And if you have a problem
involving manipulating a list, searching it or replacing or whatever, yeah, you should
go look it and go find the built-in ones. There is a particular case though that I want
to show you and that is–well, actually–I’m sorry. There is–there’s one–another one
that I’m going to show you, which is something I haven’t talk about so far. So here is A,
there’s a–I guess this is an operator called del, I mean, delete. And what delete does,
obviously, it deletes. But, particularly, you can use it on a variable. So if I say
del A, what that does is it kind of removed the definition of A from my local scope. Whereas,
when I design A to six or whatever that I put in there. So, now, if–after that if I
try and use A, it’s like, “Oh, that’s not define.” So it’s kind of the reverse of the
direction I’ve tried before. And what happens, the del also works on list. So if I say A
is equal to one, two, three, and let’s say if I can say, well, you know–if I can say
“A[1]”, that’s the two, right. So in terms on how you can use a del to actually retain
the list, so if I say del of “A[1]”, that kind of deletes out on that list, but now,
the list actually shrinks. So that’s–I’ve shown you how to add, I’ve shown you how to
pop, also del has another way. You can surf the one there. Yes, question over here.
>>So if you do–if you design A to B for instance without copying it but actually point…
>>PARLANTE: And so this one–in these cases, we’re actually just doing the interpreter.
Okay, let’s say B is something like it’s 12, and I say A equals B.
>>And then you del A?>>PARLANTE: Okay. And so if I say del A…
>>B is still B.>>PARLANTE: …then B is still fine.
>>Okay.>>PARLANTE: All right. The del A–what it
does, it’s just kind of removes–I mean, it’s sort like when I had A and B point at the
list, right. It’s like, well, the list is still there. Deleting A, I’m just like–I’m
deleting the idea of A, but whatever it pointed to, something else might have been pointing
to as well. Now, with the 12–I use the word point there as a little inaccurate but the
basic pattern holds. All right, so the most interesting thing with list I want to show
you is sorting. So there’s this old way of doing sorting. Well, there’s actually a dot
sort method on the list and I want you to not use that one. I’m going to show you this
newer, cooler way that it’s just better than everyone. And you can–yeah, with all those
dinosaurs were using dot sort you can just like look down on them. All right, so what
I’m going to do–well, first of all I’m going to show you the most basic case. So let’s
say A equal to you know, four, two, one, six. So the simplest way to do sorting is there’s
a function called sorted. And you can feed a list into sorted, and what it does is it
makes a new list and it sorts it, sorts it in increasing order. Now, so in this case
when I call sorted on A, it’s making this new list and then it sort again. In this case,
we’re getting a numeric sort. In reality what’s going on is it’s the comparison in Python
depends on the type of thing being compared. And in this case, it’s a list of int. And
so when I gets down to the comparing one int to another it sees like, “Oh, this is two
ints, so I should do a numeric comparison. If, instead, I have the list of strings, it
would have gotten down to comparison with the scene, “Oh, I have two strings,” and so
it would have done a textual comparison. Again, it has that sort of Python quality like at
the last possible second it sees whatever the two types are and it does something appropriate,
I guess. So one of the things about sorted–and, actually, I’ll pull up the help page for sorted.
Remember help? So if I say “help(sorted)”, it’s pretty [INDISTINCT], “sorted(iterable)”.
So this actually works for a list. You can actually feed into sorted any–an iterator–some
other things that kind of–are capable of producing list so that they are not themselves
list, you can feed those into sorted too, it just works with all of this, anything that
kind of looks like a sequence. So these syntax here were first two optional named arguments.
And so this built-in, like–yeah, you can just not specify CMP or key or reverse, but
if you do specify them, then, you can sort give these extra arguments. This is a nice
quality in Python. So in this case, I had “sorted(a)”. In that way, I could also say,
“sorted(a,…” and then one of the optional argument is called reverse. So, I mean, I
have to go look up and see if that was the name, but I see the name was reverse. And
if I pass through for that, then, it still sorts them but I just get it the backwards
way. So that’s a very common problem. I see you just want to sort the other way so, and
so that’s the built-in. Yes, question.>>I just need to ask to see whether A gets
assign a sorted list or gets [INDISTINCT].>>PARLANTE: Yeah, sorted makes a copy. It
makes a new one and sorts that.>>[INDISTINCT] into a new…
>>PARLANTE: Yeah. Yeah. So for example–well, so here is A, it’s unchanged right?
>>Yeah.>>PARLANTE: And here’s “sorted(a)”. What
I could do–this is what you’re suggesting–is I could say A is equal to “sorted(a)”. Like
yeah, I don’t care to keep the original on that, that’s fine. So now, it’s sorted. So
you have the–once we spend over it you would even don’t have a choice right, so this way
you get to pick. All right. So let me show you just like basic sorting. So, now, I want
to show you this little more sophisticated about how to do custom sorting in Python.
And the Python syntax–the Python structure for this, I think, is really nice, but it’s
going to be a little more complicated. All right, so I’m going–and I’m going to set
up my case, so it’s exactly the same as the one in the handout. All right, so here, I’m
going to have some strings. So if I say “sorted(a)” here, the strings what–by default what I
get is textual sort. Now, the problem I want to consider is–for custom sorting, right,
you want to sort some other way, not just textually. The case I want to consider is,
well, suppose I want to sort this by length, right. I want to D first and then the B’s
and then C’s, right. I want kind of increase in order by length just for–just as an example.
How might I do that? Well the old way to specify custom sorting in a lot of languages is that
you write what’s called the two argument competitor. You provide some function that takes two arguments
and compares those two and returns either a negative number or zero or positive number
depending on how you wish for those to be ordered and you feed that into the sorting
function and then uses it. That is a classic technique, the two argument comparative technique.
But it’s a little messy, it’s a little difficult to describe, and it’s just not that great.
So Python, we’re not just going to do that way. I’m going to show you a different way.
And the idea is I’m going–here’s a piece of art in the handout. So in this case at
the top, I’ve got my original list. And I’ve got this idea that what I want to do is I
want to sort by the length. So the way it’s going to work in Python is I’m going–you–we
are going to provide a function of one argument. This called the key function. And this function
of one argument, then, what the system is going to do is it’s going to run it over our
original list. And for each element in the original list, it’s going to call the function
of one argument and it’s going to get a single value and it’s going to build up a list of
those new values. So I’m going to kind of walk over here kind of point at my drawing.
So here at the top, we’ve got my original list. Now, imagine the function of one argument
that I’m going to use in this case is the Len function. We’ve been using it all along,
right. And Len, when you call it on a string, it returns the length to that string. So I’m
going to give it–I’ll show you the syntax, but I’m going to say, “Hey, use Len as the
kind of key function in this case.” So it’s going to call Len–what is it–five times,
and it’s going to get this numbers right. Three for the string length–three for the
string length, just gets this kind of shadow list of new values. So–now, here’s where
the magic happens. What the sorting is going to do when I call sorted, I specify key function,
it’s going to make the shadow list and then it’s going to sort the shadow list. So the
one is going to come first, right, and then the two, whatever, it figures that out. And
I got to make this hand waved motion that’s why it’s kind like sorting motion, but then
it applies it to the original list. It actually shifts around the original elements. And so
the result is that I get to the bottom. I get the original elements but sorted according
to the values of the shadow list. Now, it’s a little hard–yeah, it’s a bit much to follow,
but I’ll tell you, in my experience this is a much more convenient way to do custom sorting.
You just set–sort of gets your brain around this idea projecting out the shadow list.
So before I take questions, let me just demo that working. Show you what that looks like
and then we can–then, we can work on some of the examples. Right, so there’s A, and
here’s Len, it’s like a function. It’s a lot like a function. So what I’m going to say
is what I want is “sorted(a)”, and I’m going to give this optional argument called “key=…”
and I’m going to specify a function to use, in this case I’m just going to say, “Yes,
use Len.” So if I do that, then, it’s under the hood. It’s kind of projecting out that
list. Now, let me do a second example, and I’m going to change my list a little bit.
Let’s changed–let’s changed “a[1]=’aaaz”. I’m going to mix my problem up a little bit
here. Let’s say, “How do I”–I want to sort this by the last character in each string.
I want to ignore all the other characters. Just give me–this is the sort of problem,
there’s a custom sort that you might solve with the key equals function. And I’m going
to do it with a def just like what you’ve done. So I’m going to say “def Last(s)”, and
we’re going to do this on one line. There’s nothing–because I’m the interpreter here.
So let’s say, def Last(s): return s[-1]”. Okay. Now, last is fine. So, now, if I say,
“Last” just like so, like, “Oh,” that points to a function just like if I say Len, okay,
yeah, that’s function. The one that’s built-in, the one’s I just made, but it’s still going
to work. All right, so the last function, you give it a string and it just return that
last character. So, now, if I say sorted so, now, I remind what is that? So now, if I say
“sorted(a, key=…” just the thing I just defined, “Last”, then check it out. So, now,
I’ve done custom sorting. And in this case, what it’s doing in the shadow list is it just
pulling out whatever the last, you know, the minus one–whatever the last character is
sorting by that. So there’s a couple example of custom sorting. Yes, question.
>>So if the last time when A was DD, would it release by factors DD, would it [INDISTINCT]
like do the first sort by number of characters and then within if there were two?
>>PARLANTE: Actually, yeah. So I’m going to answer a slightly different question. So–I
mean there’s this idea of, “What if I want to sort by one thing and then I want to sort
by something else?” You know, let me–I can answer that more effectively when I’ve covered
one more data structure. There is a way of doing that, but I’d like to just hold off
on it. I mean, it’s a very reasonable question.>>[INDISTINCT] what, would it just be random
if you didn’t use that extra [INDISTINCT].>>PARLANTE: I don’t think it would works.
Do you want? But what I preferred to, I’m going to save time and show you the way that
it does work, then, we can talk about it, okay. And so that’s why unsatisfying, but
there’s these other data structure we’d really need for this. All right, so I understand–I
think the sorted thing is one of the more difficult things, kind of kick your head around.
But, yeah, predictably, the exercises have like a bunch of custom sorts and it’s a very
powerful technique. So I’d say hold off on that. And then I do have this beautiful art
in the handout so try and–try and follow. So just hold on with that, on the next set
of exercises which will be pretty soon, you’ll get a chance to play with that. All right,
so let me show you, just a couple other things with the list. So one–I’ll stick with A,
just these strings. One fairly common thing to do once you’ve got your program and you
want to now produce your output is you want to–you want to make a string out of list.
So, like, one thing you might do is maybe loop through this list, right? I could type
“for s in a:” and, you know, kind of print each element or something. It turns out, that’s
okay but there’s a built in that just takes the list and sort of concatenates or whatever
all the parts of it together just in one step. So that’s such common on our version; that’s
nice to know. So, for example, if I were to say, so this is called dot join. So if I were
to say ‘:’.join(a), what it does is it just puts it all together in one string just in
one step. And so it’s a little unintuitive but actually the case I most use–use most
often is backslash n; like I say new line, dot join, and then really I’ve now got one
per line but just all in one step. And then I can just print that in one step or, you
know, write it to a file or whatever. So that is a handy one to know. I’ll switch back to
the colon 1. So going in the other direction, there’s also a split. So actually here, I’ll
say b is equal to that so now b is the string I’ll put together. If I say, ‘:’.split(b)–oops,
was that wrong? Oh, I’m sorry, no, it’s the other way. Sorry, b.split(‘:’) so you have
a string, you called dot split and you say here is essentially the delimiter. Then it
kind of explodes it out so you can recover the original list. So split out either–you
know these are really not actually deep but this just happens to be a common case. So
those are handy to know. Oh, I should mention, those are not regular expressions; those are
just substrings. We’ll do regular expressions tomorrow. Yes, question?
>>Can you talk about something really simple which is like, what if you were going through
a list of data and you’re making a list. Maybe here you are just defining this but
>>PARLANTE: Yes, yes. Yes, here, so let’s do a little example like that, yes. So the
question is how do you kind of make a list, yes. So one pattern that shows up in the exercises
is like let’s say I’ve got “a” here and I want to loop through this and I want to–I
want to pick out some of them and put them on some other list. A pattern might be like
this where I’ll say a result is equal to the empty list and then I’ll say something like
for s in a: and I going to kind of–I want to add some of them to the results or whatever.
The way you would do that, I’ll just add them all in this case but I’m going to loop through
it. I want to put some of this. I would just use append so I’d say result.append(s) in
this case. So now if I look at results, I mean, essentially what I’ve done is I’ve just
copied all this over. So in terms of–that is a common pattern. You start with empty
list and you kind of put some stuff in it.>>I guess, like let’s say you’re our data
or whatever, you don’t have any list and your’e starting your for loop…
>>PARLANTE: Yes, yes. So the question is, yes, what if you have documents, I mean, what
you are getting at is realistic. The trick is I’m going to show you how to open files
and read text out of it and then I think at that moment I’ll answer that question. But,
yes, thus far, I’m just doing list a little bit. You know, I haven’t gotten to that yet.
All righty, so the last thing I’ll show you is just for completeness; I haven’t showed
you like a traditional for loop like i equal zero one to the–you know, like in C or java
script, you might do that all the time. Mostly, the ones I’ve shown you, these techniques
just cover it. However, there–I will show you how–if you want to count a bunch of numbers,
the way to do that is there is a function called range. And what range does is it sort
of on–if I say range 20 it’s sort of on the fly appears to build this list, starting at
zero and running up to but not including that number. So, if you want to count from, you
know, zero to nineteen, you could say for i in and then call range to kind of on the
fly make this list appear, and so that would be a way. Now, there is a little bit of difference
between Python 2, 4 and Python 3, whether that list is really created in memory or is
it fake-created. The more modern version is just fake-created or you know which saves
memory. So you can–you should not worry about that efficiency detail because the more modern
versions are just all over it. Now, I have shown you just the most simple case of calling
range where you give it one argument but in fact you can specify the starting number and
the end number and should it go by fives, all those kinds of permutations range supports
when you give it more optional arguments. And so if you want to generate a series of
numbers, that would be the way to do it. There is also a while loop which now I’m just going
to demonstrate but yes, it works like while loops in other languages. The most common
case though is the one I’ve showed you, just the for loop to loop over our question. Last
thing I’ll have to say about the for loop is that it does have this constraint which
is when you are looping over a list, you cannot modify that list in a way which changes its
length or structure. So you can’t add an element–it kind of makes sense, if you add an element
in the loop, you could kind of get this weird infinite structure. So do not modify while
iterating over. Incidentally, Java has that same constraint, sort of, based on–there
is an implementation reality underneath there. All righty, so we are almost ready for another
exercise. The last thing I want to show you is the tuple. So, I showed you strings surrounded
by quotes, lists surrounded by curly braces. The tuple is actually–it’s a modest little
data structure and it looks like this. Tuple is put in parenthesis and has commas inside
to separate the elements. So a tuple–now a list can grow and shrink, right? It can
start as length zero and I can append, put stuff in there, delete, whatever. The tuple
is fixed-sized. You create it length three, it’s length three forever. In fact, it’s immutable.
You just can’t change it. So what–the tuple is good if you have some fixed number of items.
Like let’s say you want to store an x, y, z coordinate in three dimensional space, right,
there’s never going to be a fourth number. You know it’s just these three, I want to
lock them together. Tuples are good for that. Or let’s say you have a URL and a score and
it’s these two things so, like, I want these two things to go together. In Python, you
can put those on a tuple length 2 and store that on a list or return it from a function
or whatever. So the tuple is the kind of anonymous way of taking a fixed number of things and
just kind of locking them together so you can pass them around or store them or whatever.
So the–and in the later exercises, you’ll see some examples of this. So I’ll sign a
to this tuple I guess. And then kind of like you could guess, I’ll make this claim that
Python is all consistent. So how do suppose you tell the length of a tuple? Of course,
it’s len, right? And how do you pick an element out? Yes, it’s square bracket. So all that
stuff list, strings, you know, pretty much works for tuples as well. The one difference
is the tuple is immutable. So if I say a square bracket zero equals 13, I try to sign into
it, that’s going to fail, right? So the tuple can’t be changed. Once you create it, it’s
like a string. So tuples and strings, immutable; lists, mutable. There was a question earlier
about sorting. And it turns out, if you want to sort by one thing and then sort by another
thing, the best way to do that is with tuples. And so I think I can do a short example here
so I’ll say 1, comma, a, comma, so this is–I’m making a list of tuples here. Oops, okay,
let’s make that b and then here we’ll make this 2, comma, a. So, the way it’s going to
work is if you sort tuples, just the natural under-the-hood sorting, what it does is it
first compares the first elements of the tuples. And if they’re different, it just sorts by
that. But if those elements are the same then it goes to the next one. So here, and I need
to make this–and I would just say 1a. All right, so what I’ve made is a list of tuples.
And to show this off, I think if I do sorted on that, where the first number are the same,
it goes to the second, right. So in the two 1 cases, then it is sorted by a b and then
this one is last. So that is a little bit of a detail. It’s not something–I haven’t
planned on mentioning this but for the question back here, if you want to sort on one thing
and then sort by something else, what you can do is write your key function to return
a tuple. And then in–by whatever you put in that tuple, you can get the behavior you
want, you know, put the thing you want to sort on first, that’s the first thing, and
then a comma and whatever the second thing is and it will just go automatically go to
the second thing if the first thing is the same. And that is just built-in Python sorting,
like it gets how to sort tuples that way. All righty, so one other thing I have to show
you with tuples, this is kind of, dare I say, kind of a Perl, I think it is sort of a Perl
feature is that if you say (x, y), there’s a special thing with assignment and variables,
if you say (x, y) in tuple equals (1, 2), what it does is kind of a parallel assignment.
So now, x, x is 1 and y is 2, not super common thing to use but it does show up now and then.
The–okay, now, there’s more stuff though I’ll show you later about that. All righty,
so what we’ve seen really at this point, so let’s take in, is list, how to loop over them
and dot append or whatever and sorting and a little bit about tuples. So what I would
like you to do is take a look at the exercise. I’m sorry, question?
>>Yes, does slicing work with tuples?>>PARLANTE: Yes, slicing works with tuples.
So what I would like you to do is take a look at the exercise list 1 dot P Y. This is going
to involve doing basic stuff with lists and also a little bit of custom sorting. As before,
if you are just so unbelievably fast that you finish those then there’s a list dot 2
dot P Y. But mostly, I’m just hoping people can, you know, get at least some of the problems
done in list 1 dot P Y. And what I’d like you to do is work on that, say, for half an
hour. So I’m going to pull you guys back here at 2:20. I’ll do one more lecture and then
we’ll have significantly bigger exercise till I finish out the afternoon. Okay, so, off
with coding.

100 thoughts on “Google Python Class Day 1 Part 2

  1. awesome, makes me feel like I am in classroom.. reminds me of my first corporate training of PLSQL and JAVA at Wipro. Thank you.

  2. can i has a job on GOOGLE pleez i r reel smart i gotted an 560 on my SATs and i no how two program computer watch: print("hello world")

  3. I have a problem.
    i have dictionary and want to write a document where when i click on the key it gives me its value. how do i write a program for that.

  4. is this guy actually speaking to google employees or is he at some introductory programming class etc..? Because no offense but these guys are asking amateur questions that I feel, if they are google employees, should not be asking. if that's the case I should be working there.

  5. Now I haven't seen this exercise but from your description it sounds like the desired result would be a sorted merge of the two list and your "simple solution" would include duplicates of those elements common to the two lists. Their solution (as you describe it) probably avoids those duplicates. Sounds like the test data should have included those cases – otherwise if there was no requirement of "no duplicated elements" your simpler solution is just as valid.

  6. I did the same solution as you and came here wondering why the solution given in the example was so much more complicated.
    It does not remove duplicates – I tried adding those and it just sorted them.
    So the results are exactly the same, no matter what the list looks like, except that the solution given by google removes (.pop) the element from the list when adding it to the 'result' list until one list is empty. Don't know why :S

  7. Thank you for taking the time to reply 🙂 What I meant though wasn't why it happens, but why they would do it that way 🙂
    Someone suggested in another comment that it was to get rid of duplicates, but it's not 🙂
    The only real reason I can see to use this much more complex way would be for optimization, but that seems a bit overkill on the third hour of the first day's class 🙂

  8. At question E my solution is
    def remove_adjacent(nums):
    result = []
    for i in nums:
    if len(result) == 0 or i != result[-1]:
    result.append(i)
    return result

    However, the solution .py shows a completely different solution.
    They have the same output though.
    Is mine missing something important?

  9. It's not really that surprising (and this doesn't just apply to Google but industry wide) because even though they may be quite bright, they would likely have been taught wrong concepts about the basics. For example, how many times have you heard that variables are like boxes that hold values? Tons of times, right? Well, it turns out that's actually not the best way to think of them. The presenter here is using the correct (or better, if you wish) terminology: POINTS to a value NOT store it.

  10. python is kinda cheating..
    if you guys check on the last question on list2.py, the solution is only

    return sorted(list1.extend(list2))

    compared to the long solution provided..

  11. I'm confused.My solution to the last problem in list2.py is
    return sorted(list1 + list2)
    compared to complex solution provided by nick.
    What am i missing?

  12. At 5:00 failed to modify 'a' or 'b' and then show resulting values of a and b to prove how second method ( i.e. b= a[:]) results in b becoming a distinct object. The point lecturer was trying to make was completely missed.

  13. The problem practically asks that the solution only looks at each element only once. Since we are guaranteed that the two lists to be merged are individually sorted, it is possible to build the new list with this condition in mind. Most sorting algorithms have to account for the general case of sorting, however, and will potentially 'look' at each element more than once.

  14. Speaking as a hetero guy, I think I'm in love with Nick.
    I did a course of his via Coursera last year too, his teaching style is perfect.

  15. Why, in list2.py from the exrcises at E, you have this conversation about how list.pop(0) is not linear etc., while the solution is simply " return sorted(list1 + list2); "?

  16. These classes seem to be aimed more towards those people, who have programming language experience in C/C++ and/or Java. Being C++ programmer with good familiarity with the language, Python is easy to comprehend, but for those with no previous programming background… might be too fast a pace.

  17. For those with programming experience (which is the intended audience of these classes) I found doing the exercises with Eclipse and PyDev to greatly enhance my learning experience. I feel ready to transistion into larger Python projects with a solid IDE. I have experience working with c++ in VS, so I just need a little nudge to get the syntax right.

  18. Him nice lecture. A question about the example of using tuples to sort on two different things: isn't the same effect achieved by using lists of lists? Is the following code less efficient than the tuple version?

    >>> a = [[1, "b"], [2, "a"], [1, "a"]]
    >>> sorted(a)
    [[1, 'a'], [1, 'b'], [2, 'a']]

  19. It is the same in this simplistic case, but what if your list mixed different data types in each position and your sorting logic had to account for various different comparisons? E.g.:

    >>> a = [ [1, 3], [2, 1], [1, 'a'] ]

    >>> sorted(a)
    Traceback (most recent call last):
    File "string", line 301, in runcode
    File "interactive input", line 1, in module
    TypeError: unorderable types: str() int()
    >>>
    Again, this is fairly simply but tuples will be essential for more complex things.

  20. Uhm…doesn't Google own Youtube? lol or are you talking about the tutorial makers who aren't associated with a big named company?

  21. You didn't understand my comment did you. 7 others did. Read it again. Your comment is pathetic seriously. I know Google acquitted YouTube. back in late 06'-08'. No need why I must answer your question.

  22. There is no denying the extent of the instructors' knowledge, however, his style of presentation detracts from the potential of his contribution to our understanding. The intolerable use of filler words 'uh' 'so' 'but' is exemplary of an ill-suited communicator. So many excellent resources exist on YouTube for python programming. This is not one of them. Bravo, nonetheless, for demonstrating the utility of Python in a software culture dominated by superfluously complex languages!

  23. Way better than what our prof for methodic and practical computer science does… guess i'll be taking my lessons from these videos now X)

  24. at 7:00, you don't have to write in a single line. print num can be indented in the second line under for line, and hit return will print the num as usual.

  25. Don't know whether I can ask it here. But I am doing it anyway cause I don't find a place where I can put in my doubts. In the exercise list2 you need to merge two strings and sort them in linearly . What does that mean?

  26. # B. front_x can be done using single list only 

    def xsort(x):
        if x[0] == 'x':
            r = 'a' + x
        else:
            r = 'b'+ x
        return r
    def front_x(words):
      return sorted(words,key=xsort)

  27. >>>range(20)
    range(0,20),,,,,,this is what my shell returns and not list as shown in the tiutorial
    why??

  28. hey there, just an FYI about parallel assignment, you don't need tuple syntax to do this.
    a, b = 1, 2
    # works without parens

  29. It is not about just teaching but you guys are great in creating interest and that actually creates the infinite loop … lust for knowledge

  30. For the sorting, what if you had non-homogeneous data types, for example integers, floats and maybe strings.  (Don't know if anyone would ever do this, or there would be a need for it)  So, you might have

    [ 1.23, five, 39, 0.012, -23, "negative", "positive", "silly", 48, "negative twenty-two" ]

    And you want to numerically sort anything that can be interpreted as a number and string sort anything else, so …

    [ -23, "negative twenty-two", 0.012, 1.23, "five", 48, "negative", "positive", "silly" ]

    I guess in other words can the comparator function have complex conditionals in it and access things like the number of elements in the list?  How complex can this get?

  31. Great lecture. Definitely worth watching if you are learning Python. In the beginning of the series, the lecturer mentions that you need some familiarity with programming before taking the course, and that is very true.

  32. piece of art using range() !!!

    >>> def frange(start, stop, step):
    …     i = start
    …     while i < stop:
    …         yield i
    …         i += step
    … 
    >>> for i in frange(0.5, 1.0, 0.1):
    …         print(i)
    … 
    0.5
    0.6
    0.7
    0.8
    0.9
    1.0

  33. I created a list
    a = [1,2,'1bhgf']
    and made another one by using:
    b=a
    then I did the operation:
    a = a+[23]
    then the value of a became: [1,2,'1bhgf', 23]
    but the value of b was still: [1,2,'1bhgf']

    My python version is 2.7.10, did some thing change in this version?

  34. This is my first exercise with programming ever. I have done string1.py and string2.py and with help of tutorials and stack overflow I did it in a week not half an hour like this teacher is expecting to do it. O_O

  35. This is a good video for people with existing programming experience. Better than learning on coursera, or codeacademy.. Discussion differences between compiled languages and their syntax to python makes things alot easier to understand..

    On a side note this guy talks like Rodney Mckay (David Hewlett) from Stargate Atlantis…

  36. I wrote a program that prints a sorted list of random integers between 1 and 50.
    I want that, after printing, the program returns to the begin (where it asks "how many lists do you want?). Can some one help? (it's the GOTO 10 in basic…)

  37. The url splashed boldly at the opening is a dead end. I found the materials at https://developers.google.com/edu/python/exercises/basic

  38. Thanks for tutorial – just wondering was this meant for Google programmers, asking silly questions 🙂

  39. What would have happened to b after del a if a was a list..

    a=[1,23,4]
    b=a
    del a
    print (b)

    would b still be [1,23,4]??

  40. It seems to me that List.append here actually return None, so actually we allow the use of a=append(item) but it won't react as we expected since it is equal to a = None and thus just clear the list we had. My question is, why won't we put a error here as we go through this function because it is really dangerous if someone mis-use this

  41. This guy knows his stuff well. I recommend having the python interpreter open while you watch this so you can test the code at the same time.

  42. i took a udemy course on python and this is a fantastic video to summarize it all. awesome job.

    but i wouldnt recommend this for anyone without any programming experience or taken other courses first

  43. These lectures are a great way for experienced programmers to learn Python. The live demos are perfect for following along. The pace is just right. Thank you!

Leave a Reply

Your email address will not be published. Required fields are marked *