您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python [iter(list)] * 2是什么意思?

python [iter(list)] * 2是什么意思?

解释起来很棘手。我会试一试:

[iter(lst)]您创建一个包含一个项目的列表。该项目是列表上的迭代器。

每当python尝试从此迭代器获取元素时,lst都会返回的下一个元素,直到没有更多元素可用为止。

只需尝试以下操作:

i = iter(lst)
next(i)
next(i)

输出应如下所示:

>>> lst = [1,2,3,4,5,6,7,8]  
>>> i = iter(lst)
>>> next(i)
1
>>> next(i)
2
>>> next(i)
3
>>> next(i)
4
>>> next(i)
5
>>> next(i)
6
>>> next(i)
7
>>> next(i)
8
>>> next(i)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

现在,您将创建一个包含两次 迭代器的列表。你这样做 itlst = [iter(lst)] * 2

试试以下:

itlst1 = [iter(lst)] * 2
itlst2 = [iter(lst), iter(lst)]
print(itlst1)
print(itlst2)

结果将类似于:

>>> itlst1 = [iter(lst)] * 2
>>> itlst2 = [iter(lst), iter(lst)]
>>> print(itlst1)
[<list_iterator object at 0x7f9251172b00>, <list_iterator object at 0x7f9251172b00>]
>>> print(itlst2)
[<list_iterator object at 0x7f9251172b70>, <list_iterator object at 0x7f9251172ba8>]

需要注意的重要一点是,该itlst1列表包含两次相同的迭代器,而itlst2包含两个不同的迭代器。

说明尝试输入:

next(itlst1[0])
next(itlst1[1])
next(itlst1[0])
next(itlst1[1])

并将其与:

next(itlst2[0])
next(itlst2[1])
next(itlst2[0])
next(itlst2[1])

结果是:

>>> next(itlst1[0])
1
>>> next(itlst1[1])
2
>>> next(itlst1[0])
3
>>> next(itlst1[1])
4
>>> 
>>> next(itlst2[0])
1
>>> next(itlst2[1])
1
>>> next(itlst2[0])
2
>>> next(itlst2[1])
2

现在到zip()函数https://docs.python.org/3/library/functions.html#zip):

请尝试以下操作:

i = iter(lst)
list(zip(i, i))

zip()有两个参数。每当您尝试从中获取一个元素时,zip都将执行以下操作:

list(zip(xxx)) 将重复执行此操作并将结果存储在列表中。

结果将是:

>>> i = iter(lst)
>>> list(zip(i, i))
[(1, 2), (3, 4), (5, 6), (7, 8)]

一个使用的技巧是用于*将第一个元素用作函数调用的第一个参数,将第二个元素用作第二个参数,依此类推)*(双星号/星号)和(星号/星号)的作用是什么做参数?

所以写:

itlst1 = [iter(lst)] * 2
list(zip(*itlst1))

在这种情况下等于

i = iter(lst)
itlst1 = [i] * 2
list(zip(itlst1[0], itlst[1]))

等同于

list(zip(i, i))

我已经解释过了

希望以上解释了大多数技巧。

python 2022/1/1 18:27:14 有181人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶