在Python里,**for**循环语句简直是我的老朋友了。说真的,离开它,好多事情都没法干。你想啊,数据处理、网页抓取、游戏开发,哪个环节能少了循环?所以,咱们今天就好好聊聊,Python中的for语句怎么写才能真正玩转它。
最基础的,**for**循环的语法是这样的:
python
for 变量 in 可迭代对象:
循环体
这个“可迭代对象”就很关键了,它决定了循环的次数和每次循环时“变量”的值。Python里的可迭代对象太多了!比如列表(list)、元组(tuple)、字符串(string)、字典(dict)、集合(set),甚至还有文件对象。
先拿列表来说吧,这是最常用的:
python
my_list = [1, 2, 3, 4, 5]
for number in my_list:
print(number * 2)
这段代码会依次打印出2、4、6、8、10。挺简单,对吧? number 这个变量,在每次循环里,都会被赋值为 my_list 里的一个元素。
如果你需要同时访问列表的索引和值,可以用 enumerate() 函数:
python
my_list = ["apple", "banana", "cherry"]
for index, fruit in enumerate(my_list):
print(f"Index: {index}, Fruit: {fruit}")
这样就会打印出:
Index: 0, Fruit: apple
Index: 1, Fruit: banana
Index: 2, Fruit: cherry
enumerate() 真的是个好东西,特别是当你需要在循环里根据索引做一些操作的时候。
再来说说字符串。字符串也是可迭代对象,所以你可以这样循环它:
python
my_string = "Hello"
for character in my_string:
print(character)
这会一个字母一个字母地打印出来。
对于字典,**for**循环默认遍历的是字典的键(key):
python
my_dict = {"name": "Alice", "age": 30, "city": "New York"}
for key in my_dict:
print(key, my_dict[key])
要同时访问键和值,可以用 .items() 方法:
python
for key, value in my_dict.items():
print(f"Key: {key}, Value: {value}")
这个 .items() 返回的是一个包含键值对的元组的列表,所以你可以用两个变量来接收它们。
还有,range() 函数也是个经常和 **for** 循环一起用的家伙。它可以生成一个整数序列:
python
for i in range(5):
print(i)
这会打印出0、1、2、3、4。range(5) 相当于生成了一个 [0, 1, 2, 3, 4] 的列表,但它实际上并不会在内存里创建这个列表,而是按需生成,所以更节省内存。
range() 函数还可以接受两个或三个参数:
range(start, stop):生成从start到stop(不包括stop)的整数序列。range(start, stop, step):生成从start到stop(不包括stop),步长为step的整数序列。
比如:
python
for i in range(2, 10, 2):
print(i)
这会打印出2、4、6、8。
**for** 循环里还有两个很重要的关键字:break 和 continue。
break 用于提前结束循环。比如:
python
my_list = [1, 2, 3, 4, 5]
for number in my_list:
if number == 3:
break
print(number)
这段代码只会打印出1和2,因为当 number 等于3的时候,break 语句被执行,循环就结束了。
continue 用于跳过当前循环的剩余部分,直接进入下一次循环。比如:
python
my_list = [1, 2, 3, 4, 5]
for number in my_list:
if number == 3:
continue
print(number)
这段代码会打印出1、2、4、5。当 number 等于3的时候,continue 语句被执行,跳过了 print(number) 这一行,直接进入下一次循环。
另外,Python 还支持 **for**...else 结构。else 里的代码只会在循环正常结束(也就是没有被 break 中断)的时候执行:
python
my_list = [1, 2, 3, 4, 5]
for number in my_list:
if number == 6:
print("Found 6!")
break
else:
print("6 is not in the list.")
因为 my_list 里没有6,所以这段代码会打印出 “6 is not in the list.”。
还有一种更简洁的写法,叫做列表推导式(list comprehension)。它可以让你在一行代码里创建一个新的列表:
python
my_list = [1, 2, 3, 4, 5]
new_list = [number * 2 for number in my_list]
print(new_list)
这会打印出 [2, 4, 6, 8, 10]。 列表推导式不仅更简洁,而且通常也更快,因为 Python 解释器对它做了优化。
你可以给列表推导式加上条件判断:
python
my_list = [1, 2, 3, 4, 5]
new_list = [number * 2 for number in my_list if number % 2 == 0]
print(new_list)
这会打印出 [4, 8],因为只有偶数才会被乘以2。
除了列表推导式,还有字典推导式和集合推导式,它们的用法类似。
“`python
字典推导式
my_list = [1, 2, 3, 4, 5]
my_dict = {number: number * 2 for number in my_list}
print(my_dict) # 输出: {1: 2, 2: 4, 3: 6, 4: 8, 5: 10}
集合推导式
my_list = [1, 2, 2, 3, 4, 4, 5] # 注意重复的元素
my_set = {number for number in my_list}
print(my_set) # 输出: {1, 2, 3, 4, 5} (集合会自动去重)
“`
你看,**Python中的for语句怎么写**,其实没那么难。 关键是要理解可迭代对象的概念,掌握 break、continue、else 这些关键字,以及灵活运用列表推导式。 多练习,多实践,你也能成为 **for** 循环的高手!
