【问题标题】:Comprehensions in Python to sample tuples from a listPython 中从列表中采样元组的理解
【发布时间】:2016-04-22 06:51:44
【问题描述】:

我正在尝试使用推导从列表[-4, -2, 1, 2, 5, 0] 中获取三元素元组的列表,并检查它们是否满足条件sum([] == 0)。以下代码有效。然而,毫无疑问,应该有一种更简单、更优雅的方式来表达这些理解:

[
    (i, j, k) for i in [-4, -2, 1, 2, 5, 0]
              for j in [-4, -2, 1, 2, 5, 0]
              for k in [-4, -2, 1, 2, 5, 0] if sum([i, j, k]) == 0
]

输出:

[(-4, 2, 2), (-2, 1, 1), (-2, 2, 0), (-2, 0, 2), (1, -2, 1), 
 (1, 1, -2), (2, -4, 2), (2, -2, 0), (2, 2, -4), (2, 0, -2), 
 (0, -2, 2), (0, 2, -2), (0, 0, 0)]

问题是搜索像(i, j, k) for i, j, k in [-4, -2, 1, 2, 5, 0] 这样的表达式。

【问题讨论】:

  • 是否允许重复值?

标签: python list tuples list-comprehension


【解决方案1】:

您可以使用itertools.product 隐藏列表解析中的嵌套循环。使用repeat参数设置列表的循环次数(即元组中元素的数量):

>>> import itertools
>>> lst = [-4, -2, 1, 2, 5, 0]
>>> [x for x in itertools.product(lst, repeat=3) if sum(x) == 0]
[(-4, 2, 2),
 (-2, 1, 1),
 (-2, 2, 0),
 (-2, 0, 2),
 (1, -2, 1),
 (1, 1, -2),
 (2, -4, 2),
 (2, -2, 0),
 (2, 2, -4),
 (2, 0, -2),
 (0, -2, 2),
 (0, 2, -2),
 (0, 0, 0)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 2018-08-06
    相关资源
    最近更新 更多