Python 深入列表

列表推导式

在学习python的列表推导式前,我们先学习三个东西:lambda、map、filter

lambda表达式

lambda是在一行中编写一个函数,但如果这个函数被多次调用,则其性能会受到一定的影响,其格式为

函数名 = lambda 参数1,参数2:函数体

add = lambda a1,a2:a1 + a2

该lambda表达式的含义与下面这个函数所表达的意思是一样的

def add(a1,a2):
	return a1+a2

map

map函数用于将一个函数作用于一个可迭代对象的所有元素,在python3中其返回值是一个迭代器。

def double(x):
	return x*2


lis = list(range(5))
print(list(map(double, lis)))

# [0, 2, 4, 6, 8]

filter

filter函数用来获取满足用户定义条件的集合中的元素子集,在python3中其返回值是一个迭代器。

def odd_number(x):
    return x%2 == 1


lis = list(range(5))
print(list(filter(odd_number, lis)))

# [1, 3]

lambda、map、filter的使用

有时lambda、map、filter联合使用能带给我们很大的便利

double = lambda x:x*2
odd_num = lambda x:x%2 == 1
lis = list(range(5))

print(list(map(double, lis)))
print(list(filter(odd_num, lis)))

# [0, 2, 4, 6, 8]
#[1, 3]

如上述例子中,运用这三个可以得到很大得便利,但其实还是缺乏了一些灵活性。
其实我们还可以使用更简单的方法来创建列表,列表推导式
列表推导式是一种简洁而灵活的方法,它可以利用表达式及其他列表来创建一个新的列表。它是由一个方括号构造的,其中的表达式或函数仅在元素满足某种条件时才应用于列表中的每个元素。

语法

[expression(x) for x in list if optional_condition(x)]

例子

lis = list(range(5))
print([x*2 for x in lis])
print([x for x in lis if x%2 ==1])

#[0, 2, 4, 6, 8]
#[1, 3]

运用列表推导式来表达上面例子便又简单了几分。

反向索引与切片

python允许反向索引,比如list[-1] == list[len[列表]-1],即列表的最后一位。

我们还可以使用 list[start🔚step]对列表进行切片 ,其中包含开始元素,不包含结束元素。
如调用[1:3]给出的[1, 2]

我们还可以通过list[::-1]来获得反转列表。

列表可以使用星号来获得子列表
如:

lis = list(range(5))
a, *b, c = lis

print(a, b, c)
# 0 [1, 2, 3] 4

其中a取了列表的第一位1,c取了列表的最后一位4,剩下的就都是b的了。

zip函数

zip函数创建一个迭代器,用于聚合来自多个列表的元素。可以使用*来解压它

a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zip1 = zip(a,b)     

zip2 = zip(a,c) 

zip3 = zip(*zip1)          # 与 zip 相反,*zip1 可理解为解压

print(list(zip1))
# [(1, 4), (2, 5), (3, 6)]

print(list(zip2))        
#[(1, 4), (2, 5), (3, 6)] # 元素个数与最短的列表一致

print(list(zip3))
# [(1, 2, 3), (4, 5, 6)]

enumerate自动计数器

enumerate是一个经常在for循环中使用的自动计数器,因此在for循环中不在需要通过counter = 0 和
counter += 1 来创建和初始化计数器变量。
语法

enumerate(sequence, [start=0])

其中
sequence表示一个序列、迭代器或其他支持迭代对象。
start表示下标起始位置,默认值为0。

例子

upper = ['A', 'B', 'C', 'D', 'E', 'F']
lower = ['a', 'b', 'c', 'd', 'e', 'f']
for i, (upper, lower) in enumerate(zip(upper, lower), 1):
    print(f'{i}: {upper} and {lower}.')
# 1: A and a.
# 2: B and b.
# 3: C and c.
# 4: D and d.
# 5: E and e.
# 6: F and f.

for循环中的第一个参数i用来接受enumerate的自动计数器的值,最后一个数字1代表着从1开始计数,如果不写的话,则代表从0开始。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值