- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章在Python中使用列表生成式的教程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式.
举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):
1
2
|
>>>
range
(
1
,
11
)
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
]
|
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:
1
2
3
4
5
6
|
>>> L
=
[]
>>>
for
x
in
range
(
1
,
11
):
... L.append(x
*
x)
...
>>> L
[
1
,
4
,
9
,
16
,
25
,
36
,
49
,
64
,
81
,
100
]
|
但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:
1
2
|
>>> [x
*
x
for
x
in
range
(
1
,
11
)]
[
1
,
4
,
9
,
16
,
25
,
36
,
49
,
64
,
81
,
100
]
|
写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法.
for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:
1
2
|
>>> [x
*
x
for
x
in
range
(
1
,
11
)
if
x
%
2
=
=
0
]
[
4
,
16
,
36
,
64
,
100
]
|
还可以使用两层循环,可以生成全排列:
1
2
|
>>> [m
+
n
for
m
in
'ABC'
for
n
in
'XYZ'
]
[
'AX'
,
'AY'
,
'AZ'
,
'BX'
,
'BY'
,
'BZ'
,
'CX'
,
'CY'
,
'CZ'
]
|
三层和三层以上的循环就很少用到了.
运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:
1
2
3
|
>>>
import
os
# 导入os模块,模块的概念后面讲到
>>> [d
for
d
in
os.listdir(
'.'
)]
# os.listdir可以列出文件和目录
[
'.emacs.d'
,
'.ssh'
,
'.Trash'
,
'Adlm'
,
'Applications'
,
'Desktop'
,
'Documents'
,
'Downloads'
,
'Library'
,
'Movies'
,
'Music'
,
'Pictures'
,
'Public'
,
'VirtualBox VMs'
,
'Workspace'
,
'XCode'
]
|
for循环其实可以同时使用两个甚至多个变量,比如dict的iteritems()可以同时迭代key和value:
1
2
3
4
5
6
7
|
>>> d
=
{
'x'
:
'A'
,
'y'
:
'B'
,
'z'
:
'C'
}
>>>
for
k, v
in
d.iteritems():
...
print
k,
'='
, v
...
y
=
B
x
=
A
z
=
C
|
因此,列表生成式也可以使用两个变量来生成list:
1
2
3
|
>>> d
=
{
'x'
:
'A'
,
'y'
:
'B'
,
'z'
:
'C'
}
>>> [k
+
'='
+
v
for
k, v
in
d.iteritems()]
[
'y=B'
,
'x=A'
,
'z=C'
]
|
最后把一个list中所有的字符串变成小写:
1
2
3
|
>>> L
=
[
'Hello'
,
'World'
,
'IBM'
,
'Apple'
]
>>> [s.lower()
for
s
in
L]
[
'hello'
,
'world'
,
'ibm'
,
'apple'
]
|
小结 。
运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁.
思考:如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错:
1
2
3
4
5
|
>>> L
=
[
'Hello'
,
'World'
,
18
,
'Apple'
,
None
]
>>> [s.lower()
for
s
in
L]
Traceback (most recent call last):
File
"<stdin>"
, line
1
,
in
<module>
AttributeError:
'int'
object
has no attribute
'lower'
|
使用内建的isinstance函数可以判断一个变量是不是字符串:
1
2
3
4
5
6
|
>>> x
=
'abc'
>>> y
=
123
>>>
isinstance
(x,
str
)
True
>>>
isinstance
(y,
str
)
False
|
请修改列表生成式,通过添加if语句保证列表生成式能正确地执行.
最后此篇关于在Python中使用列表生成式的教程的文章就讲到这里了,如果你想了解更多关于在Python中使用列表生成式的教程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我刚刚更新了 Ruby,现在我在尝试启动 compass 时遇到以下错误: Encoding::CompatibilityError on line ["28"] of /usr/local/Cell
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试在我的 iOS 应用程序中开发可折叠/ Accordion 式的功能。这将是您可以在网站上找到的典型 FAQ 类型功能。我想点击标题,然后显示详细信息。 因为这是帮助部分,只有几个项目,我认
我正在尝试设计一个基于 REST 的 Web 服务来与我正在开发的农场动物管理系统进行交互。 为了详细说明问题,我收藏了动物 属于一个农场。每只动物都有自己的信息——例如姓名、身份证号、品种年龄等。因
我有 3 种不同的表单,其中复选框数量不同,每个部分基本上代表一个表单,因此当用户选择该部分中的复选框时,它会显示他们在该部分的总金额中 checkout 了多少 HTML
我有一份 32 页的 PDF 版家谱。与其将家谱全部放在一个非常大的 PDF 页面上(这是我想要的),不如将其格式化为一组 8 个单独的美国信纸大小的页面应该在整个宽度上缝合; 4 行这样就完成了树。
指SASS implementation for Java? : 在 Maven 目标编译包中自动编译 compass-style.org 样式表的最佳方法是什么? 我不想发送太多的自编译库,也不想通
鉴于以下 XAML... 我正在寻找一种绑定(bind) ComboBox、Button 和 Command 的方法,以便当 ComboBox 的值更改时,在 Command 上调用 CanExe
在玩具应用程序中,我有一个显示所有帖子标题的“帖子”模板。当您单击每个标题时,我不想直接进入“显示” View ,而是直接内联展开该帖子的其余内容。 我考虑过让 postRoute 重用 postsR
我需要一些使用 Twitter Bootstrap 或其他响应式框架的自定义 Swagger-UI 实现。需要在我的移动设备上使用这样的 UI 测试我的 API,但 swagger-ui 不能很好地扩
我正在做一个项目,我真的在尝试编写面向对象的 JavaScript 代码。我刚刚开始阅读Douglas Crockford's JavaScript: The Good Parts我很快开始意识到用
在 C# 中,我通过执行以下操作来加密文本数据(请注意我正在以 block ( block )的形式加密数据): public string EncryptData(string pu
我正在构建一个社交网站,该网站将向全世界公开 REST API (WCF WebAPI),以便任何开发人员都能够为该网站创建客户端应用程序、将其与其他服务集成等。 我想为 API 实现 Faceboo
我是一名优秀的程序员,十分优秀!