如何从一组列表中获取笛卡尔积(每种可能的值组合)?
输入:
somelists = [
[1, 2, 3],
['a', 'b'],
[4, 5]
]
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), (2, 'a', 5) ...]
Run Code Online (Sandbox Code Playgroud) 使用Python,我想比较列表中的每个可能的对.
假设我有
my_list = [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
我想对列表中的2个元素的每个组合进行操作(让我们称之为foo).
最终结果应该是相同的
foo(1,1)
foo(1,2)
...
foo(4,3)
foo(4,4)
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是手动迭代两次列表,但这似乎不是pythonic.
我生成所有可能的三个字母关键字e.g. aaa, aab, aac.... zzy, zzz下面是我的代码:
alphabets = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
keywords = []
for alpha1 in alphabets:
for alpha2 in alphabets:
for alpha3 in alphabets:
keywords.append(alpha1+alpha2+alpha3)
Run Code Online (Sandbox Code Playgroud)
能否以更加流畅有效的方式实现此功能?
我需要生成从给定字符集到给定范围的所有可能组合.喜欢,
charset=list(map(str,"abcdefghijklmnopqrstuvwxyz"))
range=10
Run Code Online (Sandbox Code Playgroud)
输出应该是,
[a,b,c,d..................,zzzzzzzzzy,zzzzzzzzzz]
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用已经使用过的库来做到这一点.但我需要知道它们是如何工作的.如果有人能用Python或任何可编程语言给我一个这种算法的注释代码,我将非常感激.
可能重复:
集合python的幂集和笛卡尔积
使用Python Itertools.permutations()我希望接收和输出具有重复字符的排列.举个例子,我的下面的函数和它的当前输出.
def perm(n,i):
b = 0
while b < n:
n= n -1
from itertools import permutations as p
file.write('\n'.join([''.join(item) for item in p(i,n)]))
perm(4,'0123')
Run Code Online (Sandbox Code Playgroud)
输出是:
012
013
021
023
031
032
102
103
120
123
130
132
201
203
210
213
230
231
301
302
310
312
320
321.....
Run Code Online (Sandbox Code Playgroud)
我如何获得112或222的输出?
根据我的理解,组合不是特定于排列的特定顺序.我正在寻找的是找到所有组合然后每个组合的每个排列.这可能吗?
我需要所有可能的长度为0的组合.
假设我想要k = 2 (0,0), (0,1), (1,0), (1,1)
我尝试了不同的功能,itertools但我找不到我想要的东西.
>>> list(itertools.combinations_with_replacement([0,1], 2))
[(0, 0), (0, 1), (1, 1)]
>>> list(itertools.product([0,1], [0,1])) #does not work if k>2
[(0, 0), (0, 1), (1, 0), (1, 1)]
Run Code Online (Sandbox Code Playgroud) 我有两个清单:
a = ['a', 'b']
b = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我想得到列表b元素和列表a元素之间产生的组合,但是a作为对(或三元组等)处理元素,如下面的例子给出len(b) ** len(a)了组合的数量.
c = ["a_1 b_1", "a_1 b_2", "a_1 b_3", "a_2 b_1", "a_2 b_2", "a_2 b_3", "a_3 b_1", "a_3 b_2" "a_3 b_3"]
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用itertools.product(如描述在这里),但这将只给出6种可能的组合.
来自 python 的文档:https : //docs.python.org/2/library/itertools.html#itertools.combinations
见组合_with_replacement:“#组合_与替换('ABC',2)--> AA AB AC BB BC CC”
我想使用相同的功能,附带生成“BA”、“CA”和“CB”的奖励。
python combinations combinatorics cartesian-product python-itertools
在尝试为真值表生成函数编写代码时出现了这个问题.
如何生成所有length-n排列True和False的列表?换句话说,给定一个元素列表,[True, False]我如何生成这些元素的所有可能长度-n组合的所有排列?
例如:
n=2 长度为2的排列是:
[[True, True], [True, False], [False, True], [False, False]]
Run Code Online (Sandbox Code Playgroud)
n=3 长度为3的排列是:
[[False, False, False],[False,False,True],
[False,True,False],[False,True,True],
[True,False,False],[True,False,True],[True,True,False],[True,True,True]]
Run Code Online (Sandbox Code Playgroud)
我知道这个列表中有2 ^ n个列表.我也考虑过使用itertools.product,但这似乎只是给出了特定组合的排列.在这种情况下,我想我想生成长度为n的真/假列表的所有组合的排列.
假设我有两个字符:a& b。我想获得所有可能的名单排列的a,并b对于给定长度(即5),使用Python 2.7。
我查看了itertools.permutations,但找不到允许我使用 2 个字符来构建超过 2 个字符的排列的方法。
我还查看了 Python 排列的多个 SO 答案,例如this one,但这与其他答案一起只会给出len(input)长度排列。
另外,如果有使用不同编程语言的好方法,请提出建议。我并没有一成不变地为此使用 Python。
python ×10
combinations ×2
permutation ×2
algorithm ×1
boolean ×1
brute-force ×1
list ×1
performance ×1
python-2.7 ×1