gpt4 book ai didi

python - 元组的列表理解为我提供了一个生成器 - 为什么以及如何修改?

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:54 26 4
gpt4 key购买 nike

我正在做这个网站的练习https://anandology.com/python-practice-book/working-with-data.html当我试图通过列表理解重新创建 zip 函数时。现在我创建了这个函数。但是我没有得到一个列表,而是得到了一个生成器:-(

def zipp (liste1,liste2):
length= len(liste1)
zipped=[]
[zipped.append(tuple(liste1[i], liste2[i]) for i in range(length))]
return zipped

我在这里搜索了一下,发现了这个: Python: why does list comprehension produce a generator?

因此,我已经使用了“元组”语句,但没有成功。

我不知道为什么即使插入了 tuple() 也会得到一个生成器。所以我的问题:

  1. 为什么?
  2. 我需要改变什么,或者我可以在哪里阅读/听到更多信息来“开悟”自己?
  3. 如何使用生成器获得结果? (或者我在哪里可以读到这方面的信息?)

谢谢。

编辑:我期望的结果是元组列表,其中包含每个列表的成员。这是我应该得到的:

zipp([1, 2, 3], ["a", "b", "c"])-> [(1, “a”), (2, “b”), (3, “c”)]

最佳答案

你在对象中放置了一个生成器:

tuple(liste1[i], liste2[i]) for i in range(length)

(而且 tuple 也不起作用,只需将其删除....)

(并且不要对副作用使用推导式)

最好的方法是使用列表理解完全重写它,它实际上返回一些东西,正如列表理解应该的那样,取两个长度的最小值来完全模拟 zip:

def zipp (liste1,liste2):
return [(liste1[i], liste2[i]) for i in range(min(len(liste1),len(liste2)))]

经典循环版本(无理解)

def zipp (liste1,liste2):
result = []
for i in range(min(len(liste1),len(liste2))):
result.append((liste1[i], liste2[i]))
return result

当然这就是list(zip(liste1,liste2))(强制迭代zip)

关于python - 元组的列表理解为我提供了一个生成器 - 为什么以及如何修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53416993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com