【问题标题】:Python convert multiple iterables to a list of points [duplicate]Python将多个可迭代对象转换为点列表[重复]
【发布时间】:2021-10-16 04:45:48
【问题描述】:

假设我有三个列表:

a = [0, 1, 2]
b = [3, 4, 5]
c = [6, 7, 8]

我想要一个从每个方法中选择三个值的所有方法的列表,就像一个点网格。我的目标是这样的:

d = [[0, 3, 6], [0, 3, 7], [0, 3, 8], [0, 4, 6], [0, 4, 7], [0, 4, 8], [0, 5, 6], [0, 5, 7], [0, 5, 8], 
     [1, 3, 6], [1, 3, 7], [1, 3, 8], [1, 4, 6], [1, 4, 7], [1, 4, 8], [1, 5, 6], [1, 5, 7], [1, 5, 8], 
     [2, 3, 6], [2, 3, 7], [2, 3, 8], [2, 4, 6], [2, 4, 7], [2, 4, 8], [2, 5, 6], [2, 5, 7], [2, 5, 8]]

我想定义一个函数,它可以接受任意数量的迭代,并且可以做我上面所说的。有没有办法做到这一点?

【问题讨论】:

  • 查看zip 或者可能是itertools 中的一种解释
  • 当你说“任意数量的可迭代对象”时,它们是在一个容器中,比如一个列表还是一些东西?我,e,iterables = (a, b, c)?
  • 好的,如果你问“任意数量的可迭代”,你真的需要说明这些可迭代是如何表达的。了解可迭代对象的大小是否都相同也会有所帮助。
  • @tdelaney 是的,我想我应该考虑一下。
  • @enzo 确实如此!谢谢。

标签: python permutation iterable


【解决方案1】:

我认为itertools.product 可以为您完成这项工作

from itertools import product

a = [0, 1, 2]
b = [3, 4, 5]
c = [6, 7, 8]

d = list(product(a, b, c))
d

【讨论】:

  • 我希望有一个用户定义的函数,但我会考虑它。
【解决方案2】:

你可以使用itertools.product:

>>> import itertools
>>> 
>>> a = [0, 1, 2]
>>> b = [3, 4, 5]
>>> c = [6, 7, 8]
>>> 
>>> list(itertools.product(a, b, c))
[(0, 3, 6), (0, 3, 7), (0, 3, 8),
 (0, 4, 6), (0, 4, 7), (0, 4, 8),
 (0, 5, 6), (0, 5, 7), (0, 5, 8),
 (1, 3, 6), (1, 3, 7), (1, 3, 8),
 (1, 4, 6), (1, 4, 7), (1, 4, 8),
 (1, 5, 6), (1, 5, 7), (1, 5, 8),
 (2, 3, 6), (2, 3, 7), (2, 3, 8),
 (2, 4, 6), (2, 4, 7), (2, 4, 8),
 (2, 5, 6), (2, 5, 7), (2, 5, 8)]
>>> 

要处理任意数量的列表,您可以:

>>> abc = [a, b, c]
>>> abc
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
>>> 
>>> list(itertools.product(*abc))
[(0, 3, 6), (0, 3, 7), (0, 3, 8),
 (0, 4, 6), (0, 4, 7), (0, 4, 8),
 (0, 5, 6), (0, 5, 7), (0, 5, 8),
 (1, 3, 6), (1, 3, 7), (1, 3, 8),
 (1, 4, 6), (1, 4, 7), (1, 4, 8),
 (1, 5, 6), (1, 5, 7), (1, 5, 8),
 (2, 3, 6), (2, 3, 7), (2, 3, 8),
 (2, 4, 6), (2, 4, 7), (2, 4, 8),
 (2, 5, 6), (2, 5, 7), (2, 5, 8)]
>>> 

【讨论】:

    【解决方案3】:
    a = [0, 1, 2]
    b = [3, 4, 5]
    c = [6, 7, 8]
    s = []
    for i in a :
        for j in b :
            for h in c :
                s.append([i,j,h])
    print(s)
    

    【讨论】:

    • 谢谢!这可以对任意数量的列表进行递归...
    猜你喜欢
    • 2016-08-12
    • 2017-12-30
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多