在python的List中使用for循环语句的技巧汇编

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 循环语法是这么写的:

name = "Donald Trump"

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

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

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

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

print(row_min)

上面代码的作用是找出二维数组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)

我们发现在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)

这里我们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循环的尾部添加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循环语句:

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)

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)

 

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)

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__())

#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),因为它可以减少内存开销。

  • 93
    点赞
  • 213
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: Python语言的for循环语句用于重复执行一段代码,按照一定的次数或在一定范围内遍历序列的元素。它的基本语法格式如下: ``` for 变量 in 序列: 代码块 ``` 其,变量是用于存储序列的每个元素的变量名,序列是需要遍历的对象,例如列表、元组或字符串,代码块是需要循环执行的代码段。 在循环开始前,程序会依次将序列的元素赋值给变量,并依次执行代码块。当所有元素都遍历完毕后,循环结束。 在代码块,我们可以对变量进行操作,例如输出、计算、条件判断等。循环语句的代码块可以包含任意行数的代码,但需要注意的是,代码块的缩进必须保持一致,通常使用四个空格或一个制表符进行缩进。 在循环语句,我们可以在代码块使用 `break` 语句来提前终止循环,跳出循环体。也可以使用 `continue` 语句来跳过当前迭代,直接进行下一轮循环。 for循环常用于遍历序列、遍历字典、遍历文件等场景。在遍历过程,程序可以对元素进行访问、修改以及其他操作。 总之,Python的for循环语句是一种非常常用的循环结构,通过这种语句可以方便地对序列的元素进行遍历和操作,大大简化了编程的过程。 ### 回答2: 在Python,for循环语句的格式可以用以下方式表示: ```python for 变量 in 可迭代对象: 循环体语句 ``` 其,`变量`表示每次循环迭代后的临时变量,在每次迭代,它会被赋值为可迭代对象的一个元素。`可迭代对象`可以是列表、元组、字符串、字典等,用来提供要迭代的元素。 在循环体语句,我们可以执行任意的操作,例如对该元素进行计算、打印输出、条件判断等。在每次迭代后,循环会继续执行直到可迭代对象的所有元素都被遍历完成。 值得注意的是,循环体语句前面必须要有一个缩进,这是Python代码重要的语法规定。缩进的位置决定了哪些语句属于循环体的一部分。 我们可以通过for循环来遍历列表的元素,例如: ```python fruits = ["apple", "banana", "orange"] for fruit in fruits: print(fruit) ``` 以上代码将会依次输出列表的每一个元素。输出结果为: ``` apple banana orange ``` 因此,for循环Python非常常用的一种循环结构,它可以方便地对多个元素进行操作。在编写代码时,我们只需根据具体的需求,将要循环遍历的序列对象和对应的操作写入循环即可。 ### 回答3: Python的for循环语句用于遍历序列或者可迭代对象的元素。它的基本格式是使用关键字`for`+一个变量+关键字`in`+一个可迭代对象,后面跟着一个冒号。在这个冒号后面是一个块级代码,用于执行循环体内的操作。 例如,我们可以通过以下代码遍历一个列表的元素并打印它们: ```python fruits = ["apple", "banana", "cherry"] for fruit in fruits: print(fruit) ``` 在这个例子,`fruits`是一个列表,它包含了三个水果。在循环开始之前,变量`fruit`被赋值为列表的第一个元素"apple",然后进入循环体执行第一次循环,并打印出"apple"。接下来,变量`fruit`被赋值为列表的第二个元素"banana",再次进入循环体执行第二次循环,并打印出"banana"。最后,变量`fruit`被赋值为列表的第三个元素"cherry",进入循环体执行第三次循环,并打印出"cherry"。循环结束后,代码继续执行。 除了列表,for循环还可以遍历其他可迭代对象,比如字符串、元组、字典的键或值等。另外,我们还可以使用range()函数生成一个数字序列进行遍历操作。 在循环体内部,我们可以执行任意的操作,例如修改变量的值、调用函数、嵌套循环等等。并且,我们还可以使用`break`和`continue`关键字控制循环的流程,实现条件性的跳出循环或者直接进入下一次循环。 总之,Python的for循环语句是一种非常常用的循环结构,通过灵活地设置迭代对象和循环体内的操作,我们可以处理各种各样的逻辑和任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-派神-

感谢您慷慨解囊,我会更加努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值