【问题标题】:Correct usage of itertools in python 3 [duplicate]在python 3中正确使用itertools [重复]
【发布时间】:2019-03-15 17:40:55
【问题描述】:

我正在尝试扩展以下列表
[(1, [('a', '12'), ('b', '64'), ('c', '36'), ('d', '48')]), (2, [('a', '13'), ('b', '26'), ('c', '39'), ('d', '52')])]

[(1,a,12),(1,b,24),(1,c,36),(1,d,48),(2,a,13),(2,b,26),(2,c,39),(2,d,52)]

我在 python 3 中使用了 zip(itertools.cycle()),但获得了一个 zip 对象引用。我还有其他方法可以做到吗?这适用于 python 2

【问题讨论】:

  • python3 中的 zip(和地图)返回一个生成器。使用list(zip(...)) 应该可以修复它
  • 我会刚刚完成[(n,) + tup for n, tuples in thing for tup in tuples]
  • @PatrickArtner nitpick:zipmap 都不返回生成器,尽管它们返回迭代器。
  • lst_source = [(1, [('a', '12'), ('b', '64'), ('c', '36'), ('d', '48')]), (2, [('a', '13'), ('b', '26'), ('c', '39'), ('d', '52') ])] lst_result = [(val3[0],val[0],val[1]) for val3 in lst_source for val in [ val2 for val1 in lst_source for val2 in val1[1]]]
  • @juanpa.arrivillaga 我已经纠正了——他们产生迭代器。并且范围是不可变的序列 - 有一次我必须记住这一点。

标签: python python-3.x


【解决方案1】:

zip 对象是可迭代的。与 Python 3 中的其他 API 非常相似,这个 API 现在返回一个可迭代对象(如生成器),延迟评估其输入,而不是在 list 中返回整个结果。

在大多数情况下,您可以像以前一样使用对象。

如果您需要一个列表,只需在 zip 对象上调用 list()

result_list = list(zip(itertools.cycle(...)))

【讨论】:

  • 谢谢大家。这就像一个魅力:)
【解决方案2】:

如果 zip 对象创建正确,您可以通过list(zip_object)[*zip_object] 获取列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多