【问题标题】:turning a list into a tuple python [duplicate]将列表变成元组python [重复]
【发布时间】:2013-04-23 07:26:37
【问题描述】:

我正在创建一个 python 程序。

我有一个清单:

[3, 28, 25, 126, 25, 127]

我怎样才能把它变成一个元组列表,所以列表变成:

[(3,28),(25,126),(25,127)]

它连接两个元素并组成一个元组。

【问题讨论】:

  • 在你问下一个问题之前,你应该做一些研究。如果这不能回答你的问题,那么在你提问之前try something yourself

标签: python list


【解决方案1】:
>>> L = [3, 28, 25, 126, 25, 127]
>>> zip(L[0::2], L[1::2])
[(3, 28), (25, 126), (25, 127)]

这将创建两个列表切片,步长为 2 - 一个从索引 0 开始,第二个从索引 1 开始。zip 然后创建具有每个可迭代元素的元组。

【讨论】:

  • 请注意,这不如我的解决方案高效,因为您正在制作两个浅拷贝:P
  • 其次@jamylak,您不是在创建迭代器,而是立即创建被切片子集的浅表副本。尽管对于非常短的列表,这实际上可能比最小化的函数调用更快(但在那一点上,性能差异无论如何都可以忽略不计),但是几个月前我看到的一些长凳用于类似的迭代器与生成子集的前期场景快速显示迭代器成为除最短列表之外的任何事物的最佳解决方案。
【解决方案2】:
>>> L = [3, 28, 25, 126, 25, 127]
>>> zip(*[iter(L)]*2)
[(3, 28), (25, 126), (25, 127)]

How does zip(*[iter(s)]*n) work in Python?

【讨论】:

  • 那个有点不透明。你能解释一下吗?
  • @Kyle Strand:文档中有很好的解释:docs.python.org/3.3/library/functions.html#zip
  • @KyleStrand 还添加了指向该问题的链接
  • 我注意到这里真正重要但不明显的一点是[iter(L)]*2 创建了 2 个指针(我不会称它们为标签,因为它们没有命名,只是在列表中索引) 到同一个迭代器实例,因此在执行 zip 时,会调用同一个迭代器实例来生成元组中的两个元素,默认情况下会导致所需的分组。
  • 啊。这很漂亮。
猜你喜欢
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 2017-09-10
  • 2017-03-24
  • 2015-10-30
  • 2021-10-21
相关资源
最近更新 更多