优质中文开源软件代码项目资源技术共享平台
传播开源的理念,推广开源项目
学习是对自己最棒的投资!与君共勉!
云服务器主机测评推荐,开源软件代码项目技术资源共享!

网站首页 > 主流语言 > python 正文

Python中的list内for循环小技巧

longtao100 2023-08-27 16:03:39 python 70 ℃ 0 评论

for循环是编程中最常用的循环语句之一,在各种高级编程语言中都会被频繁使用。Python也不例外,除了常规的for循环或嵌套的for循环语法,Python还提供了一种精巧的list内for循环语法。掌握这种语法可以大大提高编程效率。今天我将分享一些关于在list内使用for循环的小技巧,希望对大家有所帮助。

1. 简化for循环

使用list内for循环语法可以简化传统的for循环代码。下面是一个例子:

name = "Donald Trump"
# 使用list内for循环语法,只需一行代码
my_list = [c for c in name]
print(name)
print(my_list)

传统的for循环语法如下:

python复制代码
name = "Donald Trump"
# 传统的for循环语法,需要三行代码
my_list=[]
for c in name:
    my_list.append(c)
print(name)   
print(my_list)

传统的for循环需要三行代码,而使用list内for循环只需要一行代码即可实现相同的功能。我们再看一个例子:

python复制代码
array = [
    [16, 3, 7],
    [2, 24, 9],
    [4, 1, 12]
]
# 表达式可以是循环项的函数
row_min = [min(row) for row in array]
print(row_min)

上面的代码用于找出二维数组array(实际上是嵌套的列表)每一行的最小值,同样只需一行代码即可完成。

2. 在list内使用if条件

在list内循环中,我们也可以方便地使用if条件语句。只需在for循环的尾部添加if条件即可,避免了传统的for循环需要增加多行代码的情况。

python复制代码
names_list = ["Washington", "Trump", "Obama", "bush", "Clinton", "Reagan"]# 使用if条件过滤
l1 = [name for name in names_list if name.startswith('W')]
l2 = [name for name in names_list if name.startswith('W') or len(name) < 5]
l3 = [name for name in names_list if len(name) < 5 and name.islower()]
print(l1, l2, l3)

3. 使用更复杂的表达式

在list内的表达式中,我们可以使用循环项的方法或者自定义的函数。例如:

names_list = ["washington", "trump", "obama", "bush", "clinton", "reagan"]
# 将人名首字母大写
new_names = [name.capitalize() for name in names_list]
print(new_names)

还可以在表达式中使用if条件语句。需要注意的是,在表达式中使用if条件语句时,必须同时使用else语句,与在for循环尾部添加if条件的方式略有不同。例如:

python复制代码
names_list = ["Washington", "Trump", "Obama", "bush", "Clinton", "Reagan"]
# 在表达式中使用if条件
new_names = [name if name.startswith('T') else 'Not President' for name in names_list]
print(new_names)

4. 嵌套for循环语法

在list内可以使用嵌套for循环语法。下面是一个例子:

python复制代码
names_list = ["Trump", "Obama","Clinton"]

# 双重for循环
chars = [c for name in names_list for c in name]

print(chars)

传统的两层for循环语句如下:

names_list = ["Trump", "Obama","Clinton"]

# 传统的双层for循环,需要四行代码
chars = []
for name in names_list:
        for c in name:
        chars.append(c)
        
print(chars)

传统的双层嵌套for循环需要四行代码,而使用list内的嵌套for循环只需一行代码。然而,应当注意避免在list内加入过多的for循环,以免降低代码的可读性。

还可以在两层for循环的中间使用if条件:

names_list = ["Trump", "Obama","bush"]

# 可在两层for循环中间使用if条件
chars = [char for name in names_list if len(name) < 5 for char in name]

print(chars)

5. 避免使用map()和filter()

Python提供了一些内置函数如map()filter(),但它们的可读性较差,不容易理解。一个好习惯是尽量用list内的for循环来代替这些内置函数。就连Python的作者也建议这样做,详细信息可以参考这篇文章

map()函数可以替换为:

# 使用map函数
L = map(func, 循环体)

# 替换为:
L = [func(a) for a in 循环体]

filter()函数可以替换为:

# 使用filter函数
L = filter(condition_func, 循环体)

# 替换为:
L = [a for a in 循环体 if 条件]

6. 使用生成器(Generator)减少内存开销

在Python中,定义一个list变量时,通常会立即分配内存。这种立即分配内存的方式会增加系统的内存开销。更高效的方法是只在真正使用变量时才分配内存,而Generator变量可以实现此功能。只需将原来list的方括号替换成圆括号即可定义一个Generator变量。

# list变量,立即分配实际内存
L1 = [x for x in range(1_000_000)]

# Generator变量,不分配实际内存
L2 = (x for x in range(1_000_000))
print(L1.__sizeof__())
print(L2.__sizeof__())

此外,我们还可以在使用for循环遍历生成器时减少内存开销:

# list变量
L1 = [w for w in range(10)]
for i in L1:
    print(i)
    
# 替换为生成器变量
L2 = (w for w in range(10))
for i in L2:
    print(i)

结论:在list中使用for循环可以使代码更简洁优雅。然而,应避免添加过多的list内for循环层次,以免降低可读性。我们应尽量使用list内的for循环来代替内置函数如map和filter,因为后者会降低程序的可读性。最后,使用生成器变量可以减少内存开销。


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

请填写验证码
开源分类
最近发表
开源网标签
开源网归档