python入门八(列表生成式)【8-1 生成列表】

生成列表

要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11):

>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

>>> L = []
>>> for x in range(1, 11):
...    L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

写列表生成式时,把要生成的元素 x * x 放到前面,后面跟 for 循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。

任务

请利用列表生成式生成列表 [1x2, 3x4, 5x6, 7x8, ..., 99x100]

提示:range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...]

print [x * (x +1) for x in range(1,100,2)]

条件过滤

列表生成式的 for 循环后面还可以加上 if 判断。例如:

1 >>> [x * x for x in range(1, 11)]
2 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。

任务

请编写一个函数,它接受一个 list,然后把list中的所有字符串变成大写后返回,非字符串元素将被忽略。

提示:

1. isinstance(x, str) 可以判断变量 x 是否是字符串;

2. 字符串的 upper() 方法可以返回大写的字母。

1 def toUppers(L):
2     l=[]
3     for i in L:
4         if isinstance(i,str):
5             l.append(i.upper())
6     return l
7
8 print toUppers([‘Hello‘, ‘world‘, 101])

多层表达式

for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。

对于字符串 ‘ABC‘ 和 ‘123‘,可以使用两层循环,生成全排列:

1 >>> [m + n for m in ‘ABC‘ for n in ‘123‘]
2 [‘A1‘, ‘A2‘, ‘A3‘, ‘B1‘, ‘B2‘, ‘B3‘, ‘C1‘, ‘C2‘, ‘C3‘]

翻译成循环代码就像下面这样:

1 L = []
2 for m in ‘ABC‘:
3     for n in ‘123‘:
4         L.append(m + n)

任务

利用 3 层for循环的列表生成式,找出对称的 3 位数。例如,121 就是对称数,因为从右到左倒过来还是 121。

1 print [100 * n1 + 10 * n2 + n3 for n1 in range(1, 10) for n2 in range(10) for n3 in range(10) if n1==n3]

原文地址:https://www.cnblogs.com/ucasljq/p/11597933.html

时间: 2024-10-08 23:06:10

python入门八(列表生成式)【8-1 生成列表】的相关文章

python入门八 字符串和特殊方法

str类 创建 处理字符串的函数 下标运算符[ ] 截取运算符[start : end] 连接运算符和复制运算符 in和not in运算符 比较运算法 迭代字符串 测试字符串 搜索子串 转换字符串 删除空白字符 格式化字符串 运算符重载和特殊方法 原文地址:https://www.cnblogs.com/jing-yu/p/9109313.html

python列表生成式&生成器&迭代器

一.列表生成式 什么是列表生成式? 列表生成式是快速生成列表的一种方式.(貌似有些废话) 更专业点的说法:列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 在python2.7里 举个例子,要生成list [1,2,3,4,5],可以用range(1,6) >>> range(1,6) [1, 2, 3, 4, 5] 但是如果要生成[1x1,2x2,3x3,4x4,5x5]怎么做呢? 普通青年做法: >>&

python的列表生成式

一.r的防止字符转义 print r"a\nb" 运行结果: a\nb 二.获取变量类型 a = r"a\nb" print type(a) 运行结果: <type 'str'> 三.判断类型 a = r"a\nb" print isinstance(a,str) 运行结果: True 四.对list.tuple.dict.set进行迭代 4.1常用的方式 list = ['a','b','c'] for i in list: pri

python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,next 方法 内置函数iter(),next()  本质上都是用的对象.__iter__(),__next__()的方法 内置函数 iter(iterable),表示把可迭代对象 变成迭代器(iterator) 内置函数next(iterator) ,表示查看下一次迭代的值(当然也可以用 iterato

Python之列表生成式、生成器

列表生成式 --可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁: >>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] >>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] >>> [m + n for m in 'ABC' for n in '

5.1.24 Python之列表生成式、生成器、可迭代对象与迭代器

语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法糖的概念 "语法糖",从字面上看应该是一种语法."糖",可以理解为简单.简洁.其实我们也已经意识到,没有这些被称为"语法糖"的语法,我们也能实现相应的功能,而 "语法糖"使我们可以更加简洁.快速的实现这些功能. 只是Python解释器会把这

python列表生成式、生成器,迭代器与二分法

一.列表生成式 列表生成式是快速生成一个列表的一些公式 列表生成式的书写格式:[x*x for x in range(1 , 11)] 列表生成式语法是固定的,[]里面for 前面是对列表里面数据的运算操作,后面跟平常for循序一样遍历去读取.运行后会自动生成新的列表 一般列表生成式 list1 = list(range(1,10)) #不使用列表生成式生成列表 list2 = [x for x in range(1,10)] #使用列表生成式生成列表 print(list1) print(li

python的一些高级特性(列表生成式)

列表生成式 如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做? >>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方: >>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] 还可以使用两层循环,可以生成全排列

Python列表生成式和生成器

[1]列表生成器:列表生成式就是一个用来生成列表的特定语法形式的表达式. 1.基础语句结构:[exp for iter_var in iterable例如:a=[f(x) for x in range(10)] 2.工作过程: 迭代iterable中的每个元素:每次迭代都先把结果赋值给iter_var,然后通过exp得到一个新的计算值:最后把所有通过exp得到的计算值以一个新列表的形式返回. 相当于这样的过程:L = [] for iter_var in iterable: L.append(e