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

Posted ucas_python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]

 

以上是关于python入门八(列表生成式)8-1 生成列表的主要内容,如果未能解决你的问题,请参考以下文章

Python零基础入门

Python零基础入门

Python零基础入门

廖雪峰老师——Python入门( 列表生成式 )

Python入门-4控制语句:10推导式创建序列-列表推导式-字典推导式-集合推导式-生成器推导式

python入门第十六天__列表生成式