一、可迭代的对象(iteratle_object)
python中可以使用for循环进行迭代的对象大致有以下几种类型:
- String(字符串)
- List(列表)
- Tuple(元组)
- Dictionary(字典)
- range()内置函数返回的对象
二、for循环迭代示例
1. 依次输出字符串"python"的字符
def print_string():
string = "python"
for s in string:
print(s)
2. 依次输出列表中的元素
def print_list():
list = ['a', 'b', 'c', 'd']
for l in list:
print(l)
3. 依次输出元组中的元素
def print_tuple():
tuple = ('e', 'f', 'g', 'h')
for t in tuple:
print(t)
4. 依次输出字典中的元素
def print_dict():
dict = {'Name': 'Tom', 'Age': 18, 'Sex': '男', 'Address': '深圳'}
print('============= 方法1:通过迭代key,获取value ==============')
for key in dict:
print(key, ':', dict[key])
print('============= 方法2:通过字典中自带keys()方法获取所有的key ==============')
for key in dict.keys():
print(key)
print('============= 方法3:通过字典中自带values()方法获取所有的value ==============')
for value in dict.values():
print(value)
print('============= 方法4: 遍历字典项 ==============')
for item in dict.items():
print(item)
print('============= 方法5: 通过字典项遍历key和value ==============')
for key, value in dict.items():
print(key, ":", value)
5. 依次遍历range() 对象
def print_range():
for i in range(5):
print(i)
三、枚举函数enumerate()
enumerate(sequence, [start=0])
:主要用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标。
- sequence – 一个序列、迭代器或其他支持迭代对象。
- start – 下标起始位置的值,默认从0开始。
(1)与普通for循环相比,使用enumerate()函数的for循环能更简便地访问到索引和对应的元素。
def print_enumerate():
ls = ['a', 'b', 'c']
print('============= 方法1: ==============')
for i in range(len(ls)):
print(i, ls[i])
print('============= 方法2: ==============')
for s in ls:
print(ls.index(s), s)
print('============= 方法3: ==============')
for i, element in enumerate(ls):
print(i, element)
print('============= 方法4: ==============')
for i, element in enumerate(ls, start=10):
print(i, element)
(2)统计文件行数
# 这种方法简单,但是可能比较慢,当文件比较大时甚至不能工作。
count=len(open(filepath,'r').readlines())
# 可以利用enumerate()
count=0
for index,line in enumerate(open(filepath,'r')):
count+=1
四、列表推导式
列表推导式提供了一个更简单的创建列表的方法。常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列。列表推导式的结构是由一对方括号所包含的以下内容:一个表达式,后面跟一个 for 子句,然后是零个或多个 for 或 if 子句。 其结果将是一个新列表,由对表达式依据后面的 for 和 if 子句的内容进行求值计算而得出。
# 列表推导式
def print_ls():
squares = [x ** 2 for x in range(10)]
# 等价于
# squares = []
# for x in range(10):
# squares.append(x ** 2)
print(squares)
def print_ls1():
ls = [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
# 等价于
# ls = []
# for x in (1, 2, 3):
# for y in (2, 3, 4):
# if x != y:
# ls.append((x, y))
print(ls)