可迭代(Iterable)对象与对应的迭代器(Iterator)对象

常见可迭代对象有string,list,tuple,set,dictionary,可迭代(Iterable)对象和迭代器(Iterator)对象不同,比如,打印字符串对象,输出的是字符串,打印字符串迭代器对象,输出的是字符串迭代器的地址。但是作为输入,可迭代对象与对应迭代器对象是等价的。例如,字符串对象str与字符串迭代器对象it作为list()的输入,输出都是[‘1’, ‘2’, ‘3’],代码如下:

str = '123'
print(str)  # output:123
print(list(str))  # output:['1', '2', '3']
str = '123'
it = iter(str)
print(it)  # output:
print(list(it))  # output:['1', '2', '3']

在赋值方面,可迭代(Iterable)对象和迭代器(Iterator)对象好像也是等价的,比如下面,注(map()的返回值是一个迭代器对象,list()的返回值是一个可迭代的列表对象)

n, d = map(int, '1 2'.split())
print(f'n={n},d={d}')  # output:n=1,d=2
n, d = list(map(int, '1 2'.split()))
print(f'n={n},d={d}')  # output:n=1,d=2

但是在推导式中,可迭代(Iterable)对象和迭代器(Iterator)对象却又不是等价的

list_q = [map(int, '1 2 3'.split()) for j in range(3)]
print(list_q)
# output:
# [, 
# ,
# ]
list_q = [list(map(int, '1 2 3'.split())) for j in range(3)]
print(list_q)
# output:[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

综上,如果迭代器对象不允许,要想到转换成相应的具体的可迭代对象

你可能感兴趣的:(Python,算法比赛,python,开发语言)