列表推导式:
最终得到的是一个列表
格式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']