💻 Want to jumpstart your career in tech? Click the link below to match with the best programs for you and join your first coaching session. The first 1,000 people to click the link can join their free career coaching session with a Career Karma coach today: ck.chat/tech-with-tim
Something that he left out about unpacking is that you could use * to group a section of your collection. Let's grab his example tup = (1,2,3,4,5), if we would unpack it as follow a, *b, c = tup, than a = 1, b = [2,3,4], c = 5
In your example, what would determine that b = [2,3,4]? Is is because it is the MIDDLE values and 1 and 5 are the beginning and end? How would I get b to = [3,4,5] if a, *b, c = (1,2,3,4,5)?
@@yogiblak7819 Hi I know this is late but I assume that you would instead just do a, b, *c = (1,2,3,4,5), because the star automatically divides it up into the number of divisions you need
@@evanli4272 but there are 3 variables, so does it automatically assign a to first value, c to last and be to all values in between? Whatn if there were 60 elements in the list? Would b = all 48 of the values not in position 0 and and len - 1?
You are truly a legend Tim. I used to code when I was younger but lost my passion for it however now I am re-engaged to coding and your videos have been FANTASIC. Keep up the excellent quality of your teaching and videos.
11:25 , you probably wouldn't want to do this since it uses the original list's reference to duplicate it. If you make changes to one of the nested lists the other lists will also be changed. If you do x[0][0] = 2 for example, x is now [[2,2,3],[2,2,3],[2,2,3],...] which is most likely not the desired behavior.
I was once debugging exactly this problem for one whole day, where I didn't understand what happens at: [[random()]*5]*5 The 2D list was containing the same values because at run-time the "random" call executes first (most inner brackets) and returns a value and then that value gets mutated, and that mutation (column) gets mutated further on. It basically mutated the pointer/reference that points to the first "random" value. Must be really carefull when it comes to this!
Another cool thing combining multiple assignment, * and fstring: tup = (1, 2, 3, 4, 5) a, *b, _, c = tup print(f"{a = }; {b = }; {c = }") >>> a = 1; b = [2, 3]; c = 5 _ works as a variable (usually a throwaway one).
fun fact: the "multiple assignment" syntax is actually the same as the unpacking syntax: the right side of the equation creates a tuple that is then unpacked by the left side. for instance: x, y = a, b creates a tuple (a, b) and then unpacks it into x, y
That bit about For / Else was very insightful to me, specifically the fact that Else: ... only gets triggered if the For ... part has completed without a *break* . Thanks for this!
There is no name for the multiple assignment because there is no multiple assignment here, it is still a tuple unpacking: x, y = 1, 2 is the same as: x, y = (1, 2) A tuple is defined by the commas, not the brackets. Brackets are optional in tuples and used just for readability, that's why a tuple with one element has to be declared as (1,) and not (1).
Very helpful video. Straight to the point. I watched it several times to make sure I remember each one. I am using all of them now including the bonus itertools. Thanks a lot Tim. 👍👍
for list comprehension, or any other 'tips', its very easy to get in a habbit of trying to keep everything tight and fun and pythonic, but what should guide your behavior is the following- find someone who has had to troubleshoot a problem in a python module while under extreme time pressure, ask them what 'pythonic' habits are very hard to understand when under extreme duress. One of the pythonic habbits that because very hard to trouble-shoot under time pressure is list comprehensions where people have put way too much logic into a single conditional. How much is too much? A good rule of thumb would be 'anything more than 1 conditonal'. 1 conditional is easy, why is that our limit? Because the number of times that 1 condition turns into 2, or 3, or more during refactoring... is very high.. each step/addition makes sense when it is added but when you are trying to comprehend the entire list comprehension while on the run and in a hurry, it because a huge issue. list comprehensions are nice, just keep them very short and simple. create additional list comprehensions if you need to keep conditionalizing them. Make sure that the You under time pressure, or your friend or coworker, isn't in big trouble later.
You said "Tern-er-rary". LOL! I don't know why I find that so funny, but I do. 😂 Keep up the great work! I love your videos and how fast you fly through it without all the padding like most TH-camrs. You get in, explain it, show an example, and move on. The way it should be! Fan for life..
A very well paced and the exact level of detail for such a video. For a future version, you can maybe include the enumerate function to loop over a list while keeping track of the index (to do something every x elements - like printing a message)
WRT the f-string segment of the video, another way of printing variables that is very often used in early python (and thus everywhere in legacy code) is the format, bracket string: money = '$10.00' print("We have {} left to spend".format(money)) I used to use f-strings exclusively until some of my code was getting deployed into < python 3.0 environments and causing all kinds of issues. If you know you are deploying into a brand new, all-modern python environment then there is no issue but if you are not sure then you should seriously consider format bracket strings.
thanks for all the videos! may I ask to make some full time episodes on useful modules in python like intertools and random and much more I don't even know 😅
Thanks for another amazing video! I think I had an "AHA!" moment here, and I tried looking somewhere else if someone had already asked about it, but I found out I cannot even phrase it properly to render precise results in my search. I'll try to phrase here. Regarding the *args, if you use name, say, a list with another name besides args, you can still use the * to unpack the values exactly the same way, right? Up till now, I was attached to the idea that *args you could only use * to unpack iterables using specifically the variable name args, which I decided to test, and it is not true. So, is it a convention at all to use the variable name args when * unpacking with *args? Or is *args is just a way to refer to this technique of unpacking interables with *?
11:29 be really careful with the nested list multiplication. It creates n copies of links to the same list, so if you change one list, you will change them all
Hey, Tim, hey! Thank you very much for your videos and tutorials. You make very useful content. Please give advice on what books and resources to use to study Python. I want to learn how to create bots and applications on a python. I’d really appreciate your help
Great tutorials! However, it's hard to believe that One can start a 100k career from tutorials and 3 month boot camps.. So if you were to create a road map for individuals pursuing a dev job as a self taught person, what would this road map be? How likely am I to land a job assuming I did posses the necessary skills? What are dev interviewers expecting from the interviewee? What should I avoid in learning code so as not to waste my time. Much appreciated!
In the section on list comprehension, in printing out the dictionary example at the end I could not discern why the otput had the order (or seemngly lack of order) it did! Could anyone explain, I'm sure I'm missing the obvious?
The dict comprehension is iterating over a set of the characters in the sentence. Sets are an unordered data structure and therefore don't preserve insertion order.
What do you think about the pydash module? Have you ever used it? Is it helpful to you? Maybe consider to make a video about that module? I think it's pretty handy ^^
I'd like to know how Tim gets the execution duration of the script at the bottom of the terminal. Is this a built in feature of vscode? Ie: "Finished in xxxxms"
The unpacking lacked a little bit of clarity. In javascript, it's called destructuring and, when destructuring an object you need to wrap it with curly braces, and refer to the object key, in which you get the value from it. You didn't clearly explain, in python we do the same, with the olny caveat that it returns the keys, not the values and we'd need to do dict.items() to get the items?
Hey man It is a nice video but I use that instead of F string. For instance Name = "Niko" print( "Hello {}".format(Name)) And you? Which one is easier for you? Plz remark in comment.
f strings are far easier to read for other people if they don’t know your code, they are also a bit more efficient but it really comes down to preference
💻 Want to jumpstart your career in tech? Click the link below to match with the best programs for you and join your first coaching session. The first 1,000 people to click the link can join their free career coaching session with a Career Karma coach today: ck.chat/tech-with-tim
Something that he left out about unpacking is that you could use * to group a section of your collection. Let's grab his example tup = (1,2,3,4,5), if we would unpack it as follow a, *b, c = tup, than a = 1, b = [2,3,4], c = 5
You can also use this to optionally assign. For example, with a, b, *c = (1, 2), a == 1, b == 2, c == []. It's pretty ugly, though.
In your example, what would determine that b = [2,3,4]? Is is because it is the MIDDLE values and 1 and 5 are the beginning and end? How would I get b to = [3,4,5] if a, *b, c = (1,2,3,4,5)?
@@yogiblak7819 Hi I know this is late but I assume that you would instead just do a, b, *c = (1,2,3,4,5), because the star automatically divides it up into the number of divisions you need
@@evanli4272 but there are 3 variables, so does it automatically assign a to first value, c to last and be to all values in between? Whatn if there were 60 elements in the list? Would b = all 48 of the values not in position 0 and and len - 1?
That's exactly (one of the things) what I was looking for. Thanks
You are truly a legend Tim. I used to code when I was younger but lost my passion for it however now I am re-engaged to coding and your videos have been FANTASIC. Keep up the excellent quality of your teaching and videos.
11:25 , you probably wouldn't want to do this since it uses the original list's reference to duplicate it. If you make changes to one of the nested lists the other lists will also be changed. If you do x[0][0] = 2 for example, x is now [[2,2,3],[2,2,3],[2,2,3],...] which is most likely not the desired behavior.
“The first thing you need to know is the sponsor of this video”, haha
Was just about to say the same.
raid shadow legends
Smooth segue, lol!
That’s Linus levels of smooth
Hahaha so smooth. But with this high quality content I dont mind at all haha.
Watch out when you multiply a nested list like that! All the sublists will be the same object, and changing one will change the rest
This is important. I didn’t know that. Thanks for pointing it out.
I was once debugging exactly this problem for one whole day, where I didn't understand what happens at: [[random()]*5]*5
The 2D list was containing the same values because at run-time the "random" call executes first (most inner brackets) and returns a value and then that value gets mutated, and that mutation (column) gets mutated further on. It basically mutated the pointer/reference that points to the first "random" value.
Must be really carefull when it comes to this!
@@kenny-kvibe I also had to debug this problem once. Luckily for me, it was in a relatively small program, so I could track it down somewhat quickly.
I ran into this and thought to myself...this sucks...lol
God bless you Tim! Thank you! From Nigeria
Long life to the nigerian fried rice, it's very tasty
Right!👍
EXTREMELY more helpful than I had expected !!! Thanks Tim !!
Another cool thing combining multiple assignment, * and fstring:
tup = (1, 2, 3, 4, 5)
a, *b, _, c = tup
print(f"{a = }; {b = }; {c = }")
>>> a = 1; b = [2, 3]; c = 5
_ works as a variable (usually a throwaway one).
fun fact: the "multiple assignment" syntax is actually the same as the unpacking syntax: the right side of the equation creates a tuple that is then unpacked by the left side. for instance: x, y = a, b creates a tuple (a, b) and then unpacks it into x, y
That bit about For / Else was very insightful to me, specifically the fact that Else: ... only gets triggered if the For ... part has completed without a *break* . Thanks for this!
Don't use this. There's a book full of reasons this is bad, not least being that even the creator regrets its inclusion in python.
Thanks Tim! I couldn't program at all 6 months ago, and with videos like yours it really helps make coding fast and productive.
Thank you for going over list comprehension. I was so confused on how to work them and their logic. You explained it so simply and beautifully
There is no name for the multiple assignment because there is no multiple assignment here, it is still a tuple unpacking:
x, y = 1, 2
is the same as:
x, y = (1, 2)
A tuple is defined by the commas, not the brackets. Brackets are optional in tuples and used just for readability, that's why a tuple with one element has to be declared as (1,) and not (1).
Exactly right. Too bad it's not usually explained that way.
Who in their right mind gave this video thumbs down? It is brilliant. Thank you Tim you Python genius. I’ve learnt so much from your videos.
Very helpful video. Straight to the point. I watched it several times to make sure I remember each one. I am using all of them now including the bonus itertools. Thanks a lot Tim. 👍👍
args and kwargs finally make sense! Thanks Tim
for list comprehension, or any other 'tips', its very easy to get in a habbit of trying to keep everything tight and fun and pythonic, but what should guide your behavior is the following-
find someone who has had to troubleshoot a problem in a python module while under extreme time pressure, ask them what 'pythonic' habits are very hard to understand when under extreme duress.
One of the pythonic habbits that because very hard to trouble-shoot under time pressure is list comprehensions where people have put way too much logic into a single conditional.
How much is too much? A good rule of thumb would be 'anything more than 1 conditonal'.
1 conditional is easy, why is that our limit? Because the number of times that 1 condition turns into 2, or 3, or more during refactoring... is very high.. each step/addition makes sense when it is added but when you are trying to comprehend the entire list comprehension while on the run and in a hurry, it because a huge issue.
list comprehensions are nice, just keep them very short and simple.
create additional list comprehensions if you need to keep conditionalizing them.
Make sure that the You under time pressure, or your friend or coworker, isn't in big trouble later.
That "bonus" one were very useful for me! Thx a lot!
hey, what happened to the audio from 11:41 to 11:44
Nothing, he just didnt say anything.
God this is the kind of stuff that makes me love Python. Thank you for this video! I’ve learned so much!
Just started learning python, your vids help me a lot.
Thx man !!!
'for & while else' and last bonus is pretty nice tips!!
Thanks a lot Tim!
“The first thing you need to know is the sponsor of this video” You got it right Tim! 🤣 You Legend! Thanks for sharing this video.
12:10 You can also write 2 > 3 and 1 or 0 and that's pretty much the same thing
Yes this works, but Python has given you the better way for the same action
@Pínned by Téch With Tím haha nice scam bot
@@user-do3pd1sk6c talking about how fake a scam bot can be
Damn! Bro dosent even think. He just goes with the flow.
I've been following you for quite a while, but this is the first time I recognized from your accent that you're Canadian!
Wut? He is!?
You said "Tern-er-rary". LOL! I don't know why I find that so funny, but I do. 😂 Keep up the great work! I love your videos and how fast you fly through it without all the padding like most TH-camrs. You get in, explain it, show an example, and move on. The way it should be! Fan for life..
This channel inspires me please keep up the good work.
A very well paced and the exact level of detail for such a video. For a future version, you can maybe include the enumerate function to loop over a list while keeping track of the index (to do something every x elements - like printing a message)
Looks like an awesome video and super useful! *_Also, was the first comment._*
Very very useful! Thank you Tim.
thank you so much for putting the compilation list up front.
We need some Time out with Tim!
so true
700k🎉🎉🎉🎉congratz tim
Your videos are my energy packs
Wow, I didn't know the For/While Else and other useful stuff. Thank you!
Keep going buddy 😎👍
Multiplying a nested list causes trouble as x[0] is x[1] evaluates to True. That means if you change one, the other is changed as well
Thank you for the video. I am grateful for your time and contribution. Kind regards, Akira.
great explanation of args and kwargs
Thanks Tim
You really post a bunch it is great to see
06:07 | Multiple Assignment I'm literally working in a python code that in some point does exactly that, awesome tip!
Kind man! Thank U!
7:49 You can also do this:
x = [0] * 100
Thanks for teaching us "zip".
WRT the f-string segment of the video, another way of printing variables that is very often used in early python (and thus everywhere in legacy code) is the format, bracket string:
money = '$10.00'
print("We have {} left to spend".format(money))
I used to use f-strings exclusively until some of my code was getting deployed into < python 3.0 environments and causing all kinds of issues.
If you know you are deploying into a brand new, all-modern python environment then there is no issue but if you are not sure then you should seriously consider format bracket strings.
I love to use kwargs for django models, makes everything so much faster to write, read and manage in case you change the model
your contents are really amazing man ...Thanks !
Thank you Tim
That explain so much for me👍
This Video is so helpful. Thank You Tim
thanks for all the videos! may I ask to make some full time episodes on useful modules in python like intertools and random and much more I don't even know 😅
Thanks for another amazing video!
I think I had an "AHA!" moment here, and I tried looking somewhere else if someone had already asked about it, but I found out I cannot even phrase it properly to render precise results in my search.
I'll try to phrase here.
Regarding the *args, if you use name, say, a list with another name besides args, you can still use the * to unpack the values exactly the same way, right?
Up till now, I was attached to the idea that *args you could only use * to unpack iterables using specifically the variable name args, which I decided to test, and it is not true.
So, is it a convention at all to use the variable name args when * unpacking with *args? Or is *args is just a way to refer to this technique of unpacking interables with *?
Nice I didn't know any of them except for f string
Great. Just right speed and content.
This video is of extremely useful! You explain things pretty clear with great examples👍
11:29 be really careful with the nested list multiplication. It creates n copies of links to the same list, so if you change one list, you will change them all
awesome as usual. My bookmarks are full because of your great videos ))
that was eye opening, thank you!
Thank you! Good work!
great video!!! Thanks!!!!
Great tips, thanks.
what editor are you using that runs it right out of it and puts errors on the line where they errored?
I''m learning python in a uni class and I love tips like this to make me seem smarter lmao.
Though I knew much of those, It was quite helpful!!!
Thanks tim!❣️
nice video, thx for the explaination of *args, **kwargs,
for else and while else ; this is cool, first time i see that in programmation langage
Watch till the end😉 a bonus shortcut found✌✌
wooow ! awesome tricks and thanx for the video
cool stuff, thanks Tim
pretty cool vid. thx mate
Thanking Tim
Nice video Tim
Hey, Tim, hey!
Thank you very much for your videos and tutorials. You make very useful content. Please give advice on what books and resources to use to study Python. I want to learn how to create bots and applications on a python. I’d really appreciate your help
12:50 is
x = int(2 > 3)
too clever for python?
Hello Tim. Your illustrations are very good. May I use your video for my class? I teach Python also.
Very util! Thanks!
Great tutorials! However, it's hard to believe that One can start a 100k career from tutorials and 3 month boot camps.. So if you were to create a road map for individuals pursuing a dev job as a self taught person, what would this road map be? How likely am I to land a job assuming I did posses the necessary skills? What are dev interviewers expecting from the interviewee? What should I avoid in learning code so as not to waste my time. Much appreciated!
Very good 👍
Great video!
Really helpful
אחי מה אתה עושה פה?
@@מיכאלטל-ס2ד היי!
מתכנת כמוך (:
If you want to check if something is in a list, instead of using a loop, you could use
if target in search:
In the section on list comprehension, in printing out the dictionary example at the end I could not discern why the otput had the order (or seemngly lack of order) it did!
Could anyone explain, I'm sure I'm missing the obvious?
The dict comprehension is iterating over a set of the characters in the sentence. Sets are an unordered data structure and therefore don't preserve insertion order.
There is also formatted string
'Hello, {}'.format(name)
What do you think about the pydash module? Have you ever used it? Is it helpful to you? Maybe consider to make a video about that module? I think it's pretty handy ^^
This was awesome. I consider myself an advanced python programmer yet I found valuable information in this video. Thanks a lot👍🏾
Is there a way to unpack an iterable with an unknown number of entries? Or is it necessary to know the number of elements before hand?
Thank You 😊 very much...
I'd like to know how Tim gets the execution duration of the script at the bottom of the terminal. Is this a built in feature of vscode? Ie: "Finished in xxxxms"
What font do you use?
can you do ursina video
nice tricks!!
Useful video bro...
Good work💪💪
The unpacking lacked a little bit of clarity. In javascript, it's called destructuring and, when destructuring an object you need to wrap it with curly braces, and refer to the object key, in which you get the value from it. You didn't clearly explain, in python we do the same, with the olny caveat that it returns the keys, not the values and we'd need to do dict.items() to get the items?
What’s difference in itertools chain and list extend ?
Thank you
Love this
Hey man It is a nice video but I use that instead of F string. For instance
Name = "Niko"
print( "Hello {}".format(Name))
And you? Which one is easier for you? Plz remark in comment.
f strings are far easier to read for other people if they don’t know your code, they are also a bit more efficient but it really comes down to preference
I personally use f strings as it makes my code look cleaner.
@@ibexl8631 Yeah I absolutely agree with you but sometimes I can't remember that f string and I use that.
F strings are so much better. I used to use format() until I discovered them.
Better than chain_list = itertools.chain(lst, lst2) is
chain_list = (*lst, *lst2)