python - Python 中的理解以从列表中采样元组

标签 python list tuples list-comprehension

我正在尝试从列表 [-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] 的表达式.

最佳答案

您可以使用 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)]

关于python - Python 中的理解以从列表中采样元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34832058/

相关文章:

python - 存储在列表中的特定序列

python - python中函数参数列表中的*代表什么?

python - 为什么/如何 (-1) ** 0.5 不准确?

python - 如何读取和写入单个目录中的多个文件? Python

c++ - 在排序列表上使用 upper_bound 时,查找次数为 O(N),但比较次数为 O(log(N))

list - 使用 TCL 查找字典中值的最大绝对值

C# + 检查元组列表中的间隙和重叠

haskell - Haskell 中产品类型和元组的冗余

c++ - 查看 std::vector<std::tuple<Ts...>> 中的所有 T

python - Python 中的 AI 工具入门