设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 40652|回复: 22
打印 上一主题 下一主题

【Python 第66课】列表解析

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2014-5-5 18:35:14 |只看该作者 |倒序浏览

大家假期过得可好?今天来讲讲 Python 里一个我非常喜欢的特性--列表解析(List Comprehension,也有译作列表综合)。所谓列表解析,就是通过一个已有的列表生成一个新的列表。

直接看例子:
假设有一个由数字组成的 list,现在需要把其中的偶数项取出来,组成一个新的 list。一种比较“正常”的方法是:

list_1 = [1, 2, 3, 5, 8, 13, 22]
list_2 = []
for i in list_1:
    if i % 2 == 0:
            list_2.append(i)
print list_2

输出
[2, 8, 22]

此方法通过循环来遍历列表,对其中的每一个元素进行判断,若模取2的结果为0则添加至新列表中。

使用列表解析实现同样的效果:

list_1 = [1, 2, 3, 5, 8, 13, 22]
list_2 = [i for i in list_1 if i % 2 == 0]
print list_2

输出
[2, 8, 22]

[i for i in list_1] 会把 list_1 中的每一个元素都取出来,构成一个新的列表。

如果需要对其中的元素进行筛选,就在后面加上判断条件 if。所以 [i for i in list_1 if i % 2 == 0] 就是把 list_1 中满足 i % 2 == 0 的元素取出来组成新列表。

进一步的,在构建新列表时,还可以对于取出的元素做操作。比如,对于原列表中的偶数项,取出后要除以2,则可以通过 [i / 2 for i in list_1 if i % 2 == 0] 来实现。输出为 [1, 4, 11]。

在实际开发中,适当地使用列表解析可以让代码更加简洁、易读,降低出错的可能。

留一道作业:
用一行 Python 代码实现:把1到100的整数里,能被2、3、5整除的数取出,以分号(;)分隔的形式输出。



#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

3

主题

0

好友

243

积分

中级会员

Rank: 3Rank: 3

沙发
发表于 2014-5-5 23:27:17 |只看该作者

回帖奖励 +11


  1. #coding:utf8
  2. # 用一行 Python 代码实现:把1到100的整数里,能被2、3、5整除的数取出,以分号(;)分隔的形式输出。
  3. print ';'.join([str(i) for i in range(1,101) if i%2==0 and i%3==0 and i%5==0]) #同时除尽
  4. print ';'.join([str(i) for i in range(1,101) if i%2==0 or i%3==0 or i%5==0]) #单独
复制代码
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2014-5-6 11:15:29 |只看该作者
jpjlqone 发表于 2014-5-5 23:27

good job
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

558

积分

高级会员

Rank: 4

地板
发表于 2014-9-29 22:12:03 |只看该作者

回帖奖励 +11

看了讲解,不难不难,很实用。
学习,纯粹。
回复

使用道具 举报

2

主题

0

好友

59

积分

注册会员

Rank: 2

5#
发表于 2016-2-5 09:35:48 |只看该作者

回帖奖励 +11

跟2L学的
  1. print ';'.join([str(i) for i in range(1,101) if i % 2 == 0 and i % 3 == 0 and i % 5 ==0])
复制代码
回复

使用道具 举报

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

6#
发表于 2016-2-22 15:43:53 |只看该作者

回帖奖励 +11

crossin老师,今天第一次用pycharm,想问每次运行python文件时自动生成一个configuration文件,这个需要保存吗,还是不管它就行了,有什么用呢?

Python30.png (51.31 KB, 下载次数: 597)

Python30.png

回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2016-2-22 22:51:21 |只看该作者
catherinemic 发表于 2016-2-22 15:43
crossin老师,今天第一次用pycharm,想问每次运行python文件时自动生成一个configuration文件,这个需要保 ...

我不是太清楚,但应该不用管吧
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

8#
发表于 2016-2-24 10:51:36 |只看该作者
crossin先生 发表于 2016-2-22 22:51
我不是太清楚,但应该不用管吧

好的,谢谢crossin先生,我也先暂时没管它。
回复

使用道具 举报

0

主题

0

好友

35

积分

新手上路

Rank: 1

9#
发表于 2016-11-24 18:47:45 |只看该作者

回帖奖励 +11

本帖最后由 yunzhou 于 2016-11-24 18:51 编辑

list_1 = range(1,101)
list_2 = []
for i in list_1:
    if i % 2 == 0 and i % 3 == 0 and i % 5 == 0:
        list_2.append(i)
print list_2

就不知道如何以;输出,其他要求都做到了。如何修改这段代码来达到以  ; 输出呢?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

10#
发表于 2016-11-25 13:27:26 |只看该作者
yunzhou 发表于 2016-11-24 18:47
list_1 = range(1,101)
list_2 = []
for i in list_1:

';'.join(list_2)
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-23 21:39 , Processed in 0.017673 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部