Python核心编程第八章笔记

条件表达式("三元操作符")

>>>smaller = x if x < y else y

>>>smaller

3

===使用项和索引迭代===

>>>nameList = ['Donn', 'Shirley', 'Ben', 'Janice',

...

'David','Yen', 'Wendy']

>>>for i, eachLee in enumerate(nameList):

...

print"%d %s Lee" % (i+1, eachLee)


用于迭代器类型

迭代器对象有一个next()方法,调用后返回下一个条目.所有条目迭代完后,迭代器引发一

StopIteration异常告诉程序循环结束.for语句在内部调用next()并捕获异常.



与序列相关的内建函数

sorted(),reversed(), enumerate(), zip()

下边是使用循环相关和序列相关函数的例子.为什么它们叫"序列相关"?是因为其中两个函

(sorted()zip())返回一个序列(列表),而另外两个函数(reversed()enumerate())

返回迭代器(类似序列)

>>albums = ('Poe', 'Gaudi', 'Freud', 'Poe2')

>>>years = (1976, 1987, 1990, 2003)

>>>for album in sorted(albums):

...

printalbum,

>>>for album in reversed(albums):

...

printalbum,

>>>for i, album in enumerate(albums):

...

printi, album

>>>for album, yr in zip(albums, years):

...

printyr, album


迭代器和iter()函数

>>myTuple = (123, 'xyz', 45.67)

>>>i = iter(myTuple)

>>>i.next()

123

>>>i.next()

'xyz'

>>>i.next()

45.67

>>>i.next()

Traceback(most recent call last):

File"", line 1, in ?

StopIteration


列表解析

map(lambdax: x ** 2, range(6))

[0,1, 4, 9, 16, 25]

等效的列表解析

>>>[x ** 2 for x in range(6)]

[0,1, 4, 9, 16, 25]


>>seq = [11, 10, 9, 9, 10, 10, 9, 8, 23, 9, 7, 18, 12, 11, 12]

>>>filter(lambda x: x % 2, seq)

[11,9, 9, 9, 23, 9, 7, 11]

等效的列表解析

>>>[x for x in seq if x % 2]

[11,9, 9, 9, 23, 9, 7, 11]


计算单词个数:

>>>f = open('hhga.txt', 'r')

>>>len([word for line in f for word in line.split()])

91


每个单词的长度加起来,得到和

>>>f.seek(0)

>>>sum([len(word) for line in f for word in line.split()])

408



生成器表达式

列表解析:

[exprfor iter_var in iterable if cond_expr]

生成器表达式:

(exprfor iter_var in iterable if cond_expr)

生成器并不会让列表解析废弃,它只是一个内存使用更友好的结构,基于此,有很多使用生成器地方.

>>>sum(len(word) for line in data for word in line.split())

408

我们所做的只是把方括号删除:少了两字节,而且更节省内存...非常地环保!


f= open('/etc/motd', 'r')

allLineLens= [len(x.strip()) for x in f]

f.close()

return  max(allLineLens)

这里唯一的问题就是你一行一行迭代f的时候,列表解析需要文件的所有行读取到内存中,

然后生成列表.我们可以进一步简化代码:使用生成器表达式替换列表解析,然后把它移到max()

函数里,这样,所有的核心部分只有一行:

f= open('/etc/motd', 'r')

longest= max(len(x.strip()) for x in f)

f.close()

return  longest

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值