gpt4 book ai didi

python - Python中从X到Y的所有函数列表

转载 作者:行者123 更新时间:2023-11-28 22:45:23 24 4
gpt4 key购买 nike

我有两个有限集 X 和 Y,我想生成一个列表,其中包含从 X 到 Y 的所有函数(即,从 X 到 Y 的所有映射,其中每个映射表示为一个字典,其键是X 的元素,其值是 Y 的元素;请注意,从 X 到 Y 的映射必须具有 X 的每个元素的键)。例如,如果 X = {1,2} 和 Y = {'a','b'},我想获取以下字典列表。

[{1:'a',2:'a'},{1:'a',2:'b'},{1:'b',2:'a'},{1:'b',2:'b'}]

我认为下面的代码可以满足我的需求,但我正在努力变得更像 Pythonic,所以我想知道是否有一个不需要递归辅助函数的单行代码。

def ntuples(A,n):
if n == 0:
return {()}
else:
return {x + (a,) for x in ntuples(A,n-1) for a in A}
def X_to_Y(X,Y):
return [{x:y[i] for (i,x) in enumerate(X)} for y in ntuples(Y,len(X))]

最佳答案

追求单行是 pythonic 的对立面,但避免递归通常是个好主意。在这种情况下,我们可以使用 itertools.product处理困难的部分,然后将其包装在 listcomp 中:

>>> from itertools import product
>>> X = {1,2}
>>> Y = {'a','b'}
>>> [dict(zip(X,y)) for y in product(Y,repeat=len(X))]
[{1: 'a', 2: 'a'}, {1: 'b', 2: 'a'}, {1: 'a', 2: 'b'}, {1: 'b', 2: 'b'}]

(我假设您不太关心看到的是 {1: 'b', 2: 'a'} 还是 {1: 'a', 2: 'b' 在列表的第一位。)

请记住,如果根本不需要一次具体化列表,您可以将 [] 替换为 () 使用生成器表达式而不是 listcomp,您可以对其进行迭代。

关于python - Python中从X到Y的所有函数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28649683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com