加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

列表生成式

发布时间:2020-12-20 10:57:36 所属栏目:Python 来源:网络整理
导读:今天在复习列表运算的时候,一直纳闷python为什么对列表元素操作这么麻烦,无意间看到“列表生成式”,居然发现了新大陆,迫不及待research一番。简短的一句,优美有艺术? 摘要:生成列表,可用中括号 [ ]或 list() 对列表里面的元素操作,并生成一个新列表

今天在复习列表运算的时候,一直纳闷python为什么对列表元素操作这么麻烦,无意间看到“列表生成式”,居然发现了新大陆,迫不及待research一番。简短的一句,优美有艺术?


摘要:生成列表,可用中括号 [ ]或 list()

对列表里面的元素操作,并生成一个新列表的方法:

(一)for遍历列表中的元素,并进行操作后,逐一插入空列表,形成一个新的列表:

(1)原始列表为一个时:

1 a = [......]    #原始列表
2 ls = []
3 for i in a:
4     t = ......  #对元素进行操作,并将每次的结果赋值给t
5     ls.append(t)    #将每次得到的元素b插入空列表中

(2)原始列表为多个时:

1 a = [......]    #原始列表
2 b = [......]   #原始列表
3 ls = []
4 for i in range(0,k):    #k为原始列表的元素个数减1
5     t = ..a[i]..b[i]..  #索引各原始列表,以便得到里面的元素,并对元素进行操作,将每次的结果赋值给t
6     ls.append(t)    #将每次得到的元素t插入空列表中
7 print(ls)

(二)用“列表生成式”:[ 返回值? for...in... ? if...]  # if 判断语句有需要才用

Example1:

a = [1,2,3]

b = [ ‘A‘,‘B‘,‘C‘ ]

生成 ls = [ ‘A1‘,‘B2‘,‘C3 ‘]

方法一:

1 a = [1,3]    #原始列表
2 b = [A,B,C]   #原始列表
3 ls = []
4 for i in range(0,3):    #获取0,1,2,用作原始列表的下标,索引原始列表的元素,以便于操作
5     t = b[i] + str(a[i])  #int和str不能直接拼接,先将int转为str
6     ls.append(t)    #将每次得到的元素b插入空列表中
7 print(ls)

方法二:

1 a = [1,C]   #原始列表
3 ls = [j+str(i) for i,j in zip(a,b)]
4 print(ls)
Analysis:

① zip(a,b)的结果:(1,‘A‘)? (2,‘B‘)? (3,‘C‘)

for i,j in zip(a,b):用 i 遍历zip(a,b)中的a,而 j 遍历 b。即 i 遍历上面三个元组的第一个元素,j 遍历第二个元素。为了美观,建议用 for (i,j) in zip(a,b)。这样更直观地看出两个括号的元素“一一对应”

?

Example2:

?a = [1,3]

?b = [4,5,6]

?求a和b对应元素的相加:不能 a+b(这只是将两个列表进行拼接)

方法一:

1 a = [1,3]
2 b = [4,6]
3 ls = []
4 for i in range(0,3):
5     ls.append(a[i]+b[i])
6 print(ls)

analysis:

① 行3和行5不能缺少,否则只是实现了对应元素的相加,但结果不是列表形式:

②不能写成:

1 a = [1,6]
3 for i in a:
4     for j in b:
5         print(i+j)

因为二层循环,每遍历完内层for循环后,才跳出来进行一次外层的for循环。如 i = 1时,则 j = 4,6,而不是只等于4;i = 2时,则 j = 4,6,而不是只等于5

?方法二:

1 a = [1,6]
3 ls = [i+j for (i,j) in zip(a,b)]    #for前面是空格,不能用逗号
4 print(ls)

?

拓展:range()

range()产生一个范围的数,但返回的是一个对象,如:range(1,11)

?而要查看“对象”的原始面貌,只能用list、set、tuple转化为相应的类型。(但zip()产生的对象,还可以用*zip()解压去看),对于range(),不能用中括号[ ]直接转为列表(range()比较特殊):

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读