Python之 列表推导式(含例题)

 

列表推导式:

最终得到的是一个列表

格式1:

list1 = [ i for i in range(1,21) ]           (其中最左边i,是输出列表中的元素)

等价于简单代码:

list1 = []
for i in range(1, 21):
    list1.append(i)
print(list1)

输出结果为:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

格式2:

list2 = [ i for i in range(0,101) if i%2==0 ]               (带if条件判断的)

等价于简单代码:

list2 = []
for i in range(0,101):
     if i%2==0:
          list2.append(i)

含义为:在list2里放入,0~101以内可以被2整除的数

还可以这样使用:

list3 = ['66', '007', 'jsy', 'JSY', 'main']
list4 = [word for word in list3 if word.isalpha()]
print(list4)

大致规律是,列表推导式左边为输出元素,然后从左至右进行嵌套执行的顺序

将list3中全字母的元素取出放在list4中

输出:

['jsy', 'JSY', 'main']

格式3:(可迭代指一个范围,使for可循环遍历)

list = [结果1 if 条件  else  结果2  for i in 可迭代]     (当条件语句含else时,分情况输出)

举例子:#如果是 h 开头的则将首字母大写,不是 h 开头则全部大写

list1 = ['66', 'hhh', 'jsy', 'JSY', 'main']
list2 = [word.title() if word.startswith('h') else word.upper() for word in list1]  # 对于列表元素的修改
print(list2)

含义为: 在最右侧for循环的基础上

                当if 条件成立,输出左边的 word.title()

                不成立,输出else右边的 word.upper() 

结果为:

['66', 'Hhh', 'JSY', 'JSY', 'MAIN']

格式4:两层for循环

举例:

new_list = []
for i in range(1, 5):
    for j in range(1, 4):
        new_list.append((i, j))
print(new_list)

结果为:

[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3), (4, 1), (4, 2), (4, 3)]

使用列表推导式:  (达到简化代码的目的)

# 下为使用列表推导式(简化)
list6 = [(i, j) for i in range(1, 5) for j in range(1, 4)]
print(list6)

输出同上。

列表推导式练习题:

1.请写出一段Python代码,实现分组一个 list 里面的元素,比如[1,2,3,4,5,6,...,100],变成[[1,2,3],[4,5,6],...]

通过利用列表的下标,步长和切片操作解决问题

test1 = [i for i in range(1, 101)]
print(test1)
test2 = [test1[j:j + 3] for j in range(0, len(test1), 3)]
print(test2)

输出结果:

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24], [25, 26, 27], [28, 29, 30], [31, 32, 33], [34, 35, 36], [37, 38, 39], [40, 41, 42], [43, 44, 45], [46, 47, 48], [49, 50, 51], [52, 53, 54], [55, 56, 57], [58, 59, 60], [61, 62, 63], [64, 65, 66], [67, 68, 69], [70, 71, 72], [73, 74, 75], [76, 77, 78], [79, 80, 81], [82, 83, 84], [85, 86, 87], [88, 89, 90], [91, 92, 93], [94, 95, 96], [97, 98, 99], [100]]

2.找出下列表里名字含有两个 'e' 的放到新列表中:

name = [['Tom','Billy','Jefferson','Andrew','Wesley','Steven','Joe'],                                                                    ['Alice','Jill','Ana','Wendy','Jennifer,'Sherry','Eva']]           

name = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
        ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
test3 = [i for j in name for i in j if i.count('e')==2]
print(test3)

输出:

['Jefferson', 'Wesley', 'Steven', 'Jennifer']

  • 13
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谁动了我的马卡龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值