首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组解压缩为zip函数参数

将数组解压缩为zip函数参数
EN

Stack Overflow用户
提问于 2022-04-02 20:42:05
回答 1查看 51关注 0票数 0

在我的蟒蛇之旅中我遇到了一些问题。根据Python iterator and zip的帖子,最新的答案是:

代码语言:javascript
复制
*[iter(a)] * 2

是同一件事

代码语言:javascript
复制
 *[iter(a), iter(a)]

我觉得这似乎不对。例如:如果在第一种情况下使用zip函数:迭代器的内存位置将是相同的,因此数组a将被分组为两个项的元组。

在第二种情况下,两个相同的数组将被压缩。为什么会这样呢?流量是多少。在我看来,在第一种情况下,iter方法被调用一次,然后被复制到列表中的第二位。

在第二种情况下,iter方法iter被调用两次。这是我的代码:

代码语言:javascript
复制
a = list(range(10))

def zippo(a, b):
    temp = []
    x1 = iter(a)
    x2 = iter(b)
    while True:
        try:
            item_1 = next(x1)
            item_2 = next(x2)
            temp.append((item_1, item_2))
        except StopIteration:
            break
    return temp


def iter_returner(lis_t):
    temp = iter(lis_t)
    print(temp)
    return temp


print(zippo(*[iter_returner(a)] * 2))
print(zippo(*[iter_returner(a), iter_returner(a)]))

这是输出:

代码语言:javascript
复制
<list_iterator object at 0x000001BC11A70FD0>
[(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]
<list_iterator object at 0x000001BC11A70FD0>
<list_iterator object at 0x000001BC11A70FA0>
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]

我的想法正确吗?这两种情况的流程是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-02 21:26:21

iter(a)a上返回一个新的、可变的、独立于现有迭代器的迭代器。

some_list * some_integer返回一个新列表,其中包含some_list重复some_integer时间的项。可变对象不会被复制,但是新列表的多个条目将指向完全相同的对象。

zip(*[iter(a), iter(a)])zip(iter(a), iter(a))等价,后者等价于zip(a, a) (因为zip在其参数上调用iter ),以及

代码语言:javascript
复制
for x, y in zip(a, a):
   ...

等于

代码语言:javascript
复制
for x in a:
   y = x
   ...

另一方面,zip(*[iter(a)] * 2)等同于首先执行it = iter(a),然后调用zip(it, it),正如您所观察到的,zip(it, it)基本上是将输入列表分割成对。

重要的区别是迭代器是可变的对象,在迭代器上调用next会使迭代器发生变异。

您给出的迭代器的名称并不重要。

代码语言:javascript
复制
it1 = iter(a)
next(it1)
next(it1)

..。做与以下相同的事情:

代码语言:javascript
复制
it2 = it1 = iter(a)
next(it1)
next(it2)

..。但如果你这么做了

代码语言:javascript
复制
it1 = iter(a)
it2 = iter(a)
next(it1)
next(it2)

..。您有两个不同的迭代器,它们都只能前进一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71721019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档