【问题标题】:(Python) How can I convert a list of integers into a list of sets where each set is a pair of these integers? [duplicate](Python)如何将整数列表转换为集合列表,其中每个集合都是一对这些整数? [复制]
【发布时间】:2018-08-19 03:30:00
【问题描述】:

我有一个列表E = [1,2,3,4,5,6,7,8],我想以计算成本最低的方式将其转换为E = [{1,2}, {3,4}, {5,6}, {7,8}]。特别是,我想将此扩展到E 的大型实例。

在 Python(3.5 及更高版本)中是否有有效的方法来执行此操作?

备注:E 将始终作为偶数大小的列表给出,因为我正在研究与图表相关的主题

【问题讨论】:

  • 列表是否总是偶数个元素?
  • @JGreenwell 是的。我会相应地更新我的问题。

标签: python python-3.x list set


【解决方案1】:

我相信最好的方法是在列表理解中使用iter+zip

s = iter(E)
[{a,b} for a,b in zip(s,s)]

解释:如果s 是它的iterzip(s,s)E 执行非常有效的成对分组。

【讨论】:

  • 仅当列表大小均匀时。
  • @coldspeed 感谢您的评论!如果大小不均匀,则必须手动添加最后一项
  • 感谢您的解释!我在 E 的大型实例(数千个)上尝试过它,它运行得非常快:)
【解决方案2】:

您可以遍历 E 的 2 个滚动切片:

[set(E[i:i+2]) for i in range(0, len(E), 2)]

请注意,这也适用于奇数大小的列表。

【讨论】:

  • 感谢您的反馈!我会接受@RafaelC 的回答,因为它的运行速度比您的实现要快一些。附:不知何故,当天的票数用完了:/
【解决方案3】:

你也可以使用zip()加切片:

[{x, y} for x, y in zip(E[::2], E[1::2])]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2017-02-27
    • 2021-09-27
    • 2019-09-17
    相关资源
    最近更新 更多