当前位置: 首页 > 面试题库 >

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

羊柏
2023-03-14
问题内容

我在网络中找到了下面的代码,结果是列表中两个元素的元组,如何理解[iter(list)]*2

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

[(1, 2), (3, 4), (5, 6), (7, 8)]

------------
[iter(lst)]*2
[<list_iterator at 0x1aff33917f0>, <list_iterator at 0x1aff33917f0>]

[iter(lst)]*2在上面检查了相同的迭代器,因此意味着iter重复两次,因此,如果我从2到3检查num,结果应该是[(1, 2, 3), (4, 5, 6),(7,8,NaN)] 但删除7,8

lst = [1,2,3,4,5,6,7,8]
b=zip(*[iter(lst)]*3)
list(b)
--------------
[(1, 2, 3), (4, 5, 6)]

问题答案:

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

[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都将执行以下操作:

  • 从作为第一个参数的iterable中获得一个值
  • 从iterable中获取一个值,该值是第二个参数
  • 返回具有这两个值的元组。

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 中做什么? 在这种情况下是什么意思? 问题答案: 简而言之,它遍历组合在一个元组中的可迭代元素(如列表)以及索引号: 版画 如果你要遍历一个序列(或其他可迭代的事物),并且还希望有一个索引计数器,这将很有帮助。如果你希望计数器从其他值(通常为1)开始,则可以将其作为第二个参数。

  • 问题内容: 这是什么意思,仅表示未指定类型的对象列表吗? 搜寻该字符串不会返回任何有用的信息(: 问题答案: 您需要获取更多信息的关键字是通配符

  • 我正在编写Rust by Example教程,其中包含以下代码片段: 我完全混淆了-对于,从返回的迭代器产生引用,从产生值,但对于数组,这些迭代器是相同的? 这两种方法的用例/API是什么?

  • 问题内容: 这是我的生成数据框的代码: 然后我得到了数据框: 当我输入命令时: 我有 : 根据熊猫的参考,代表列,我希望命令的结果是 所以这是我的问题:大熊猫轴是什么意思? 问题答案: 它指定轴沿其的装置被计算的。默认情况下。这与显式指定时的用法一致(默认情况下为,轴,该值将计算扁平化数组的平均值),沿行(即,以pandas为索引)和沿列。为了更加清楚起见,可以选择指定(代替)或(代替)。

  • 问题内容: 我试图在Python 3.3中使用旧的库(可追溯至2003年!)。当我导入它时,Python抛出错误,因为源文件中有符号,例如: 我猜这是该语言现在被放弃的标志。 它到底是什么意思,我应该用哪个(较新的)符号代替? 问题答案: 这意味着不等于。它取自(python的前身)此处: 订单测试(表示 “不等于” ) 我相信它是从Pascal那里获得的,Pascal是Guido开始使用的语言。

  • 问题内容: 嗨,我遇到了以下代码 这到底是怎么回事?我不确定“&”在做什么。 问题答案: 回答 该符号是按位与运算符。与1一起使用时,基本上会屏蔽该值以提取最低位,换句话说,它将告诉您该值是偶数还是奇数。 有关Python运算符的更多信息 有关更多信息,请参见:http : //wiki.python.org/moin/BitwiseOperators 为什么检查奇数与偶数比较有效 编辑:添加此部