http://www.yuyong.net

细说自学Python-语句之列表推导式

电脑现已成为我们工作、生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到自学Python-语句之列表推导式的问题,如果我们遇到了自学Python-语句之列表推导式的情况,该...

电脑现已成为我们工作、生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到自学Python-语句之列表推导式的问题,如果我们遇到了自学Python-语句之列表推导式的情况,该怎么处理怎么才能解决自学Python-语句之列表推导式带来的困扰呢,对于这样的问题其实我们只需要最简单的结构有三部分组成:1)一个表达式;2)for循环语句的第一行;3)一对中括号,包含1和2;(预示生成一个列表)[ 1)表达式 2)for 循环语句的第一行]如:[x**2 for x in range(0,10)]先举例分析运行过程:例如:#将list_a=[1,2,3,4,5]元素扩大10倍,生成新的列表。如果按传统的for循环来写:--------------------list_a=这样就解决了这样的问题,接下来给大家带来自学Python-语句之列表推导式的详细操作步骤。

1,简单结构:

最简单的结构有三部分组成:

1)一个表达式;

2)for循环语句的第一行;

3)一对中括号,包含1和2;(预示生成一个列表)

[ 1)表达式 2)for 循环语句的第一行]

如:[x**2 for x in range(0,10)]

细说自学Python-语句之列表推导式

先举例分析运行过程:

例如:#将list_a=[1,2,3,4,5]元素扩大10倍,生成新的列表。

如果按传统的for循环来写:

--------------------

list_a=[1,2,3,4,5]

list_b=[]
for x in list_a:
list_b.append(x*10)
print(list_b)

输出:[10, 20, 30, 40, 50]

--------------------

用列表推导式来写:

--------------------

list_a=[1,2,3,4,5]

list_b=[x*10 for x in list_a]
print(list_a)

输出:[10, 20, 30, 40, 50]

--------------------

比较看出,列表推导式像是for循环语句;

可以简单的理解为:

每次取出列表中的元素赋值给x,和10相乘,计算后生成新的元素。新元素组成新列表;

根据这个思路再写个例子;

--------------------

items=['经验','知道','新闻','百科','贴吧']
bd_items=['百度-'+x for x in items]
print(bd_items)

输出:['百度-经验', '百度-知道', '百度-新闻', '百度-百科', '百度-贴吧']

--------------------

每次取出列表中的一个元素赋值给x和字符串‘百度-’搭配,组成一个新的列表。

貌似和for循环语句没什么区别。

细说自学Python-语句之列表推导式

2.和if搭配结构:

在简单结构的基础上加上条件语句if

[ 1.表达式 2.for 循环语句的第一行 3.if条件语句的第一行]

说到if语句,就会想到判断,过滤,筛选;找出符合你规定条件的数据;

0自学Python条件语句

细说自学Python-语句之列表推导式

还是先说个例子来分析:

#筛选出1-100之间的所有11的倍数的数;

--------------------

numList=[x for x in range(1,100) if x%11==0]
print(numList)

--------------------

#for循环写法:

--------------------
numList=[]
for x in range(1,100):
if x%11==0:
numList.append(x)
print(numList)

输出:[11, 22, 33, 44, 55, 66, 77, 88, 99]

--------------------

比较可以看出,和基本结构的运行方法没什么区别,只是在for后面加了个if判断。

#筛选姓刘的人员:

--------------------
nameList=['诸葛亮','刘备','关羽','张飞','刘易斯','刘德华','张学友','刘欢','刘翔','齐德隆','刘亦菲','齐东强']
list_Liu=[x for x in nameList if x[0]=='刘']
print(list_Liu)

输出:['刘备', '刘易斯', '刘德华', '刘欢', '刘翔', '刘亦菲']

--------------------

#比较用for循环的写法:

--------------------
nameList=['诸葛亮','刘备','关羽','张飞','刘易斯','刘德华','张学友','刘欢','刘翔','齐德隆','刘亦菲','齐东强']
list_liu=[]
for x in nameList:
if x[0]=='刘':
list_liu.append(x)
print(list_liu)

输出:['刘备', '刘易斯', '刘德华', '刘欢', '刘翔', '刘亦菲']

--------------------

可以看出,用列表推导式,更加简洁。

细说自学Python-语句之列表推导式

3.for,for 嵌套结构

写法收集到两种顺序不同的写法:

第一种是:[ 表达式 外层的for 循环语句的第一行 内层for 循环语句的第一行]

外循环在前,内循环在后。

第二种是:[ [表达式 内层的for 循环语句的第一行] 外层for 循环语句的第一行]

显然是列表套列表;把内层循环在前做为表达式来使用,外层循环再后。

细说自学Python-语句之列表推导式

#让列表a的每一个数据都和列表b的数据合并。

--------------------

listA=[1,2,3]
listB=[15,16,17]
listC=[]
for a in listA:
for b in listB:
listC.append((a,b))

listD=[(a,b) for a in listA for b in listB]
print('C:',listC)
print('D:',listD)

输出:

C: [(1, 15), (1, 16), (1, 17), (2, 15), (2, 16), (2, 17), (3, 15), (3, 16), (3, 17)]

D: [(1, 15), (1, 16), (1, 17), (2, 15), (2, 16), (2, 17), (3, 15), (3, 16), (3, 17)]

-------------------

细说自学Python-语句之列表推导式

循环嵌套经典的例子就是99乘法表,那么用列表推导式怎么写呢:

99乘法表最少三种写法:while,for,列表推导式。

while循环;

-------------------

a=1
while a <10:
b = 1
while b <=a:
print("%sx%s=%-3s"%(b,a,a*b),end="\t")
b += 1
a+=1
print()

输出:(看图片)

-------------------

for循环写法:

-------------------

for x in range(1, 10):
for y in range(1, x+1):
print("%sx%s=%-3s" % (y, x, x * y), end='')
print()

输出:(看图片)

-------------------

列表推导式写法:

-------------------

table='\r\n'.join(['\t'.join(["%sx%s=%s"%(y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)])
print(table)

输出:(看图片)

-------------------

这里字符串函数join()用于将列表中的元素连接成一个,去除多余的字符。

\r\n换行;\t是table键。具体看下图。

细说自学Python-语句之列表推导式

细说自学Python-语句之列表推导式

细说自学Python-语句之列表推导式

细说自学Python-语句之列表推导式

细说自学Python-语句之列表推导式

总结:

综上所述:列表推导式的方法更加精简,但是对于初学者来说,不太好掌握,比如,让我写,我就得先拿for循环来试试。然后再根据for循环来完成,应该跟掌握的熟练度有关。如果有更多if,和for,那就彻底蒙圈了。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。