Python 可迭代类型
在Python中的一个可迭代对象,可以没有、有一个或几个元素。一个可迭代对象能够根据用户的需要返回其元素。
由于这种能力,我们可以使用 Python for 循环来迭代一个可迭代对象。
在现实中,range() 方法是可迭代的,因为它的输出可以被迭代。
代码
# Python program to show that we can use a for loop to loop over an iterable object
# initializing a for loop
for item in range(5):
print(item)
输出
0
1
2
3
4
Python中的字符串也是一个可迭代对象,因为我们可以用for循环来迭代它的元素。
代码
# Python program to show that string is an iterable object by looping over it
# Initializing a string object
string = 'Python'
# Looping over the string object
for item in string:
print(item)
输出
P
y
t
h
o
n
迭代表包括列表、图元和字典,因为它们可以被循环使用。作为一个例子。
代码
# Python program to show that list, tuple, and dictionary are iterable objects by looping over them
# Initializing a list object
list_ = [1, 2, 3, 4, 5, 6]
print(f"Elements of the list {list_}: ")
# Looping over the list object
for item in list_:
print(item)
# Initializing a tuple object
tuple_ = (1, 2, 3, 4, 5, 6)
print(f"Elements of the tuple {tuple_}: ")
# Looping over the tuple object
for item in tuple_:
print(item)
# Initializing a dictionary object
dict_ = {'a': 1, 'b': 2, 'c': 3}
print(f"Elements of the dictionary {dict_}: ")
# Looping over the dictionary object
for key, value in dict_.items():
print(key, value)
输出
Elements of the list [1, 2, 3, 4, 5, 6]:
1
2
3
4
5
6
Elements of the tuple (1, 2, 3, 4, 5, 6):
1
2
3
4
5
6
Elements of the dictionary {'a': 1, 'b': 2, 'c': 3}:
a 1
b 2
c 3
一般的规则是,如果一个人可以在任何东西上循环,那么它就是可迭代的。
什么是迭代器
只有可迭代的东西才有可能被迭代。而进行迭代的组件被称为迭代器。
iter()方法从给定的可迭代对象中获得一个可迭代对象。作为一个例子。
代码
# Python program to show how iter() is used
# Creating a list object
list_ = [1, 2, 3, 4, 5, 6]
# Creating the iter object
list_iter = iter(list_)
print(list_iter)
# Checking the type of list_iter object
print("The type of iter_list object is: ", type(list_iter))
输出
<list_iterator object at 0x7f56952b54f0>
The type of iter_list object is: <class 'list_iterator'>
一旦我们有了迭代器对象,我们就可以使用 next() 方法从迭代器中获取下一个项目。
代码
# Python program showing how to get the elements of the iterator object
# Creating a list object
list_ = [1, 2, 3, 4, 5, 6]
# Creating the iter object
list_iter = iter(list_)
print(list_iter)
# Using the next() function to get the elements of the iterator list_iter
e = next(list_iter)
print(e)
输出
<list_iterator object at 0x7f56952b5b50>
1
next()方法每次使用都会给出迭代器中的下一个项目。作为一个例子。
代码
# Python program to use multiple next() statements
# Creating a list object
list_ = [1, 2, 3, 4, 5, 6]
# Creating the iter object
list_iter = iter(list_)
print(list_iter)
# Using the next() function five times to get the elements of the iterator list_iter
for i in range(5):
e = next(list_iter)
print(e)
输出
<list_iterator object at 0x7f56951d6c40>
1
2
3
4
5
如果没有更多的元素,我们调用next()函数,我们会得到一个异常。
代码
# Python program to show that error is raised if we call the next() function more times than the number of elements
# Creating a list object
list_ = [1, 2, 3, 4, 5, 6]
# Creating the iter object
list_iter = iter(list_)
print(list_iter)
# Using the next() function seven times to get the elements of the iterator list_iter
for i in range(7):
e = next(list_iter)
print(e)
输出
<list_iterator object at 0x7f56952b7100>
1
2
3
4
5
6
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-14-4456e4ae5daa> in <module>
11
12 for i in range(7):
---> 13 e = next(list_iter)
14 print(e)
15
StopIteration:
迭代器是一个状态操作符。它表示在我们从一个特定的迭代器中取出一个项目后,它就不再可用。
换句话说,在我们对给定的迭代器进行循环之后,它就变成了空的。如果我们对它进行进一步的迭代,它将什么也不返回。
因为一个迭代器可以被迭代,所以在 Python 中它也被认为是一个可迭代的对象。这是很令人困惑的。作为一个例子。
代码
# Python program to show that an iterator is also an iterable object
# Creating a list and an iterator
list_ = [1, 2, 3, 4, 5, 6]
iter_ = iter(list_)
# Looping over an iterator
for l in iter_:
print(l)
输出
1
2
3
4
5
6
如果我们调用 iter() 方法并向它提供一个可迭代的数据,它将返回一个相同的迭代器。
因此,我们已经学到了不少关于Python中迭代器的东西。