for遍历list Python_不属于python循环语句的是

for遍历list Python_不属于python循环语句的是for循环是最常用的循环语句,在各种高级编程语言中都会被频繁使用,在python中也不例外,除了常规的for循环或者嵌套的for循环语法以外,python还有一种精巧的list内的for循环语句的语法,如果能熟练掌握这种语法对提高编程的效率有很大的帮助,今天我给大家我给大家分享一些我收集的关于list内使用for循环的小技巧,希望对大家有所帮助:1.简单替换for循环它的主要语法结构如下:my_list=[表达式for循环项in循环体(if条件)]这里表达式可以为循环项,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

for循环是最常用的循环语句,在各种高级编程语言中都会被频繁使用,在python中也不例外, 除了常规的for循环或者嵌套的for循环语法以外,python还有一种精巧的list内的for循环语句的语法,如果能熟练掌握这种语法对提高编程的效率有很大的帮助,今天我给大家我给大家分享一些我收集的关于list内使用for循环的小技巧,希望对大家有所帮助:

1. 简单替换for循环

它的主要语法结构如下:

my_list=[ 表达式 for 循环项 in 循环体 (if 条件) ]

这里表达式可以为循环项,也可以为循环项的函数或者方法,下面我们看给例子:

name = "Donald Trump"

#list内的for循环语法,只使用一句代码
my_list = [c for c in name]

print(name)
print(my_list)

for遍历list Python_不属于python循环语句的是

传统的for 循环语法是这么写的:

name = "Donald Trump"

#传统for循环语法,需要使用三句代码
my_list=[]
for c in name:
    my_list.append(c)
    
print(name)   
print(my_list)

for遍历list Python_不属于python循环语句的是

在这里传统的for循环需要使用三句代码, 而list内的for循环只使用了一句代码实现了同样的功能,我们再看一个例子:

array = [[16, 3, 7],
          [2, 24, 9],
          [4, 1, 12]]

#表达式可以为循环项的函数
row_min = [min(row) for row in array ]

print(row_min)

for遍历list Python_不属于python循环语句的是

上面代码的作用是找出二维数组array(其实是list内嵌list)每一行的最小值,同样也只使用了一句代码。

2.在list内的循环中使用if 条件

names_list = ["Washington", "Trump", "Obama", "bush", "Clinton", "Reagan"]
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)

for遍历list Python_不属于python循环语句的是

我们发现在list循环中也可以很方便的使用if条件 这里我们在for循环的尾部使用了if条件语句,如果换成传统的for循环语法可能又要增加许多行业代码了。

3. 使用更加复杂的表达式

names_list = ["washington", "trump", "obama", "bush", "clinton", "reagan"]

#将人名首字母大写
new_names = [name.capitalize() for name in names_list]

print(new_names)

for遍历list Python_不属于python循环语句的是

这里我们list内的表达式使用了循环项name的方法capitalize(), 我们再看一个例子:

my_list=[ 表达式(if…else 条件) for 循环项 in 循环体 ]

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)

for遍历list Python_不属于python循环语句的是

之前我们是在for循环的尾部添加if 条件,不过我们也可以在表达式中使用if条件语句。这里需要指出的是表达式内的if条件语句中必须要同时使用else语句,这和之前在for循环尾部添加if条件有所不同,这是因为在表达式内的if语句必须遵循给变量赋值的python语法如:

a = 1
b = 2 if a>0 # 语法错误

b = 2 if a > 0 else -1  

4.使用嵌套for循环语法

可以在list内使用嵌套for循环语法,下面我们看一个例子:

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

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

print(chars)

for遍历list Python_不属于python循环语句的是

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

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

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

我们看到传统的双层嵌套for循环需要使用4句代码,而list内的双层for循环只使用了一句代码。当然传统代码的可读性要比要比list内循环语句更好一些,因此也不太建议在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)

for遍历list Python_不属于python循环语句的是

5. 尽量避免使用map(),filter()这样的内置函数

python有一些内置函数如map()、filter(),这些内置函数使用简单,但是存在可读性差,不容易理解的缺点,一个良好的习惯是尽量使用list内的for循环来代替这些内置函数, 就连python的作者都建议这样做,大家可以读一下这篇文章(https://www.artima.com/weblogs/viewpost.jsp?thread=98196),因为这样做可以使代码的可读性更好。

map()函数可以这样替换:

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

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

array = [[16, 3, 7],
          [2, 24, 9],
          [4, 1, 12]]

row_min = map(min, array)
print(list(row_min))

#替换为
row_min = [min(row) for row in array ]
print(row_min)

 for遍历list Python_不属于python循环语句的是

filter()函数可以替换为:

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

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

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

#filter函数
L1 = filter(lambda name: len(name) < 5, names_list)
print(list(L1))

#替换为:
L2 = [name for name in names_list if len(name) < 5]
print(L2)

for遍历list Python_不属于python循环语句的是

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

在python中定义一个list变量时,一般会给这个list变量立即分配内存,这种在定义变量时立即分配内存的方式会增加系统的内存开销,而一种高效的方法是只在定义变量时并不立即分配实际内存,只在真正使用变量时才会分配内存,这就是我们的Generator变量,在定义Generator变量时只要将原来list的方括号替换成圆括号即可:

#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 Python_不属于python循环语句的是

#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等内置函数,因为这些内置函数也会使程序的可读性变差。最后我们应尽量使用生成器变量(Generator),因为它可以减少内存开销。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170065.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Gradle 入门教程(一):Gradle是什么[通俗易懂]

    Gradle 入门教程(一):Gradle是什么[通俗易懂]这是一篇Gradle的入门教程一、Gradle是什么1.1构建工具要解释Gradle是什么,首先要搞清楚一个名词——构建工具(BuildTool)。构建工具,顾名思义就是用于构建(Build)的工具,构建包括编译(Compile)、连接(Link)、将代码打包成可用或可执行形式等等。如果不使用构建工具,那么对于开发者而言,下载依赖、将源文件编译成二进制代码、打包等工作都需要一步步地…

  • 清华毕业生开发新特效编程语言,99行代码实现《冰雪奇缘》,网友:大神碉堡!创世的快乐「建议收藏」

    清华毕业生开发新特效编程语言,99行代码实现《冰雪奇缘》,网友:大神碉堡!创世的快乐「建议收藏」只用99行代码,你也可以像《冰雪奇缘》里的艾莎公主一样拥有冰雪魔法。虽然你不能在现实世界中肆意变出魔法,但却能在计算机的虚拟世界挥洒特效。或许你不知道,电影和动画中特效有时仅仅短短的一秒,却可能需要高性能计算机演算一周,花费惊人。《冰雪奇缘》没有真人出演,预算却高达1.5亿美元,每一秒的镜头都是经费在燃烧。一般人想用电脑做出CG特效简直不可想象。然而,最近一位来自中国的MIT博…

  • mqttnet 详解_mqttnet 简记

    mqttnet 详解_mqttnet 简记1.mqttnet开源库,https://github.com/chkr1011/MQTTnet2.服务器端和客户端服务器端和客户端两个,他们需要保持长连接,主要是通过订阅和发布来进行消息的传递交换。MQTT服务端主要用于与多个客户端保持连接,并处理客户端的发布和订阅等逻辑。一般很少直接从服务端发送消息给客户端(可以使用mqttServer.Publish(appMsg);直接发送消息),多…

  • MegaCli使用手册

    一、  下载MegaCli下载地址:ftp://download2.boulder.ibm.com/ecc/sar/CMA/XSA/ibm_utl_sraidmr_megacli-8.00.48_linux_32-64.zip或https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-com…

  • 手机号验证最新正则表达式「建议收藏」

    一般表单页面都需要填写手机号,校验用户输入的手机号码是否正确,就要用到正则表达式,用正则表达式来匹配手机号段,如在运营商号段内,则号码正确。因此,需要知道运营商最新的号段,如下所示:各大运营商手机号码段(新)中国电信号段133、153、173、177、180、181、189、190、191、193、199中国联通号段130、131、132、145、155、156、166、167、171、175、176、185、186、196中国移动号段134(0-8)、135、136、137、138

  • 浏览器添加HackBar[通俗易懂]

    浏览器添加HackBar[通俗易懂]以火狐浏览器为例第一步:打开浏览器第二步:搜索HackBar–>添加第三步:验证【六礼】冠、婚、丧、祭、乡饮酒、相见【六艺】礼、乐、射、御、书、数【六义】风、赋、比、兴、雅、颂…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号