Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Advance Praise for Head First Python Part 5 pptx
Nội dung xem thử
Mô tả chi tiết
you are here 4 165
comprehending data
Wouldn't it be dreamy if there were a way to
quickly and easily remove duplicates from an
existing list? But I know it's just a fantasy...
166 Chapter 5
factory functions
Remove duplicates with sets
In addition to lists, Python also comes with the set data structure, which
behaves like the sets you learned all about in math class.
The overriding characteristics of sets in Python are that the data items in a set
are unordered and duplicates are not allowed. If you try to add a data item to a set
that already contains the data item, Python simply ignores it.
Create an empty set using the set() BIF, which is an example of a factory
function:
Factory Function: A factory function is used to make new
data items of a particular type. For instance, “set()” is
a factory function because it makes a new set. In the
real world, factories make things, hence the name.
distances = set()
distances = {10.6, 11, 8, 10.6, "two", 7}
distances = set(james)
Create a new,
empty set, and
assign it to a
variable.
It is also possible to create and populate a set in one step. You can provide a list
of data values between curly braces or specify an existing list as an argument
to the set() BIF, which is the factory function:
Any duplicates in
the supplied list
of data values are
ignored.
Any duplicates in
the “james” list are
ignored. Cool.
you are here 4 167
comprehending data
Tonight’s talk: Does list suffer from set envy?
List:
[sings] “Anything you can do, I can do better. I can
do anything better than you.”
Can you spell “d-a-t-a l-o-s-s”? Getting rid of data
automatically sounds kinda dangerous to me.
Seriously?
And that’s all you do?
And they pay you for that?!?
Have you ever considered that I like my duplicate
values. I’m very fond of them, you know.
Which isn’t very often. And, anyway, I can always
rely on the kindness of others to help me out with
any duplicates that I don’t need.
Set:
I’m resisting the urge to say, “No, you can’t.”
Instead, let me ask you: what about handling
duplicates? When I see them, I throw them away
automatically.
But that’s what I’m supposed to do. Sets aren’t
allowed duplicate values.
Yes. That’s why I exist…to store sets of values.
Which, when it’s needed, is a real lifesaver.
That’s all I need to do.
Very funny. You’re just being smug in an effort
to hide from the fact that you can’t get rid of
duplicates on your own.
Yeah, right. Except when you don’t need them.
I think you meant to say, “the kindness of set()”,
didn’t you?
Do this!
To extract the data you need, replace
all of that list iteration code in your
current program with four calls to
sorted(set(...))[0:3].
168 Chapter 5
code review
Head First
Code Review
The Head First Code Review Team has taken your code and
annotated it in the only way they know how: they’ve scribbled
all over it. Some of their comments are confirmations of what
you might already know. Others are suggestions that might
make your code better. Like all code reviews, these comments
are an attempt to improve the quality of your code.
def sanitize(time_string):
if '-' in time_string:
splitter = '-'
elif ':' in time_string:
splitter = ':'
else:
return(time_string)
(mins, secs) = time_string.split(splitter)
return(mins + '.' + secs)
with open('james.txt') as jaf:
data = jaf.readline()
james = data.strip().split(',')
with open('julie.txt') as juf:
data = juf.readline()
julie = data.strip().split(',')
with open('mikey.txt') as mif:
data = mif.readline()
mikey = data.strip().split(',')
with open('sarah.txt') as saf:
data = saf.readline()
sarah = data.strip().split(',')
print(sorted(set([sanitize(t) for t in james]))[0:3])
print(sorted(set([sanitize(t) for t in julie]))[0:3])
print(sorted(set([sanitize(t) for t in mikey]))[0:3])
print(sorted(set([sanitize(t) for t in sarah]))[0:3])
There’s a bit of duplication here. You
could factor out the code into a small
function; then, all you need to do is call
the function for each of your athlete
data files, assigning the result to an
athlete list.
What happens
if one of these
files is missing?!?
Where’s your
exception handling
code?
A comment would
be nice to have
here.
Ah, OK. We get it.
The slice is applied to
the list produced by
“sorted()”, right?
There’s a lot
going on here,
but we find it’s
not too hard to
understand if you
read it from the
inside out.
I think we
can make a few
improvements here.
Meet the Head
First Code Review
Team.
you are here 4 169
comprehending data
Let’s take a few moments to implement the review team’s suggestion to turn those four with
statements into a function. Here’s the code again. In the space provided, create a function to
abstract the required functionality, and then provide one example of how you would call your
new function in your code:
with open('james.txt') as jaf:
data = jaf.readline()
james = data.strip().split(',')
with open('julie.txt') as juf:
data = juf.readline()
julie = data.strip().split(',')
with open('mikey.txt') as mif:
data = mif.readline()
mikey = data.strip().split(',')
with open('sarah.txt') as saf:
data = saf.readline()
sarah = data.strip().split(',')
Write your new
function here.
Provide one
example call.