Siêu thị PDFTải ngay đi em, trời tối mất

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
PREMIUM
Số trang
50
Kích thước
2.8 MB
Định dạng
PDF
Lượt xem
1299

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.

Tải ngay đi em, còn do dự, trời tối mất!