网站首页 > 主流语言 > python 正文
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,因为后者会降低程序的可读性。最后,使用生成器变量可以减少内存开销。
- 上一篇: ChatGPT模型原理分析
- 下一篇: 我入职阿里后,才知道原来简历这么写
猜你喜欢
- 2023-09-28 关于python爬虫模块urllib库详解
- 2023-09-28 python矩阵基本运算的实现
- 2023-09-28 python中的转义字符串问题
- 2023-09-28 python特殊字符作为字符串不转义的问题
- 2023-09-28 python实现矩阵的示例代码
- 2023-09-28 python中numpy.dot()计算矩阵相乘
- 2023-09-28 python中DataFrame常用的描述性统计分析方法详解
- 2023-09-28 使用jupyter notebook保存python代码为.py格式问题
- 2023-09-28 python Xarray处理设置二维数组作为coordinates方式
- 2023-09-28 Jupyter Notebook如何导入python文件时的问题
你 发表评论:
欢迎- 开源分类
- 最近发表
- 开源网标签
本文暂时没有评论,来添加一个吧(●'◡'●)