先看这个例子:
# 遍历 list
# 1-1、直接遍历到对应的元素,不依赖索引
list_x = [1, 2, 3, 5]
for item in list_x:
print(item)
# 1-2、好处是可以获取到索引,需要的时候需要用到
for index in range(len(list_x)):
print(f"{index} value is {list_x[index]}")
# 1-3、二者都遍历
for (index, item) in enumerate(list_x, start=0):
print(f"{index} value is {item}")
同 Java等其他语言差不多,for
要遍历的容器
需要是可以迭代
的
Python 中的 for
不同于Java
的for
而是更类似于foreach
,直接遍历的是其中的元素。
上面的1-2
就是利用了range()
将获取的集合长度转换为可遍历的容器,其内容是从 0-len
最后的1-3
利用了enumerate()
将单纯的元素集合转为了元组容器
,此时可以索引
和值
均访问。
语法:[表达式 for 迭代元素 in 迭代容器]
作用:通过表达式
继续处理迭代的元素
先来2 个简单的
# [0, 1, 4]
result = [x ** 2 for x in range(3)]
# [3, 4, 5]
result = [x + 2 for x in [1, 2, 3]]
# 遍历的元组,元组也可以被遍历
result = [x - 1 for x in (1, 3, 4)]
# 结果是:[0, 1, 2, 1, 2, 3]
result = [x + y for x in range(2) for y in range(3)]
# 类似如下代码
list_result = []
for x in range(2):
for y in range(3):
list_result.append(x + y)
print(list_result)
python
,比C#
和Java
这些来的更简洁再来一个类似 Java
的 filter
的操作。
result = [x for x in range(10) if x % 2 == 0]
result = [x for x in range(10) if x % 2 == 0 and x % 3 == 0]
result = [x for x in range(10) if x % 2 == 0 if x % 3 == 0]
再来一个我最后才看懂的
result = [x ** 2 if x % 2 == 0 else x + 2 for x in range(10)]
# 类似如下代码
list_result = []
for x in range(10):
if x % 2 == 0:
list_result.append(x ** 2)
else:
list_result.append(x + 2)
print(list_result)
# 结果是:[0, 3, 4, 5, 16, 7, 36, 9, 64, 11]