Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中生成非递减整数n元组?_Python - Fatal编程技术网

如何在Python中生成非递减整数n元组?

如何在Python中生成非递减整数n元组?,python,Python,考虑元组(x_1,x_2,…,x_n),每个元组都满足1的要求,您可以尝试以下方法: def list_of_tuples(n, m): return set(tuple(sorted(tup)) for tup in product(range(1,m+1), repeat = n)) 对于n=3和m=2,其结果为: {(1, 2, 2), (2, 2, 2), (1, 1, 1), (1, 1, 2)} 虽然这不是很有效,但也许这并不重要。您可以尝试以下方法: def list_of_

考虑元组
(x_1,x_2,…,x_n)
,每个元组都满足
1的要求,您可以尝试以下方法:

def list_of_tuples(n, m):
 return set(tuple(sorted(tup)) for tup in product(range(1,m+1), repeat = n))
对于n=3和m=2,其结果为:

{(1, 2, 2), (2, 2, 2), (1, 1, 1), (1, 1, 2)}
虽然这不是很有效,但也许这并不重要。

您可以尝试以下方法:

def list_of_tuples(n, m):
 return set(tuple(sorted(tup)) for tup in product(range(1,m+1), repeat = n))
对于n=3和m=2,其结果为:

{(1, 2, 2), (2, 2, 2), (1, 1, 1), (1, 1, 2)}

虽然这不是很有效,但也许这并不重要。

我不确定我是否得到了您想要的东西,但也许这个代码片段可以工作:

list_of_tuples = list(product(range(1,m+1), repeat = n))
my_set = set([tuple(sorted(t)) for t in list_of_tuples])

使用
set
操作,您可以保留每个副本的一个副本,这样您就完成了。

不确定我是否得到了您想要的内容,但这个代码片段可能会起作用:

list_of_tuples = list(product(range(1,m+1), repeat = n))
my_set = set([tuple(sorted(t)) for t in list_of_tuples])

使用
set
操作,您可以保留每个副本的一个副本,这样就完成了。

此代码可以通过递归非常轻松地完成,而无需使用
itertools

def non_decreasing(n, m):
  if n==0:
    return []
  if n==1:
    return [[i] for i in range(1,m+1)]
  return [[i] + t for t in non_decreasing(n-1, m) for i in range(1,t[0]+1)]
例如:

In [23]: non_decreasing(2,3)
Out[23]: [[1, 1], [1, 2], [2, 2], [1, 3], [2, 3], [3, 3]]

这段代码可以很容易地通过递归完成,而不需要使用
itertools

def non_decreasing(n, m):
  if n==0:
    return []
  if n==1:
    return [[i] for i in range(1,m+1)]
  return [[i] + t for t in non_decreasing(n-1, m) for i in range(1,t[0]+1)]
例如:

In [23]: non_decreasing(2,3)
Out[23]: [[1, 1], [1, 2], [2, 2], [1, 3], [2, 3], [3, 3]]
该工作是否:

from itertools import combinations_with_replacement as cwr
for tup in cwr(range(1, m+1), n):
    do_whatever_with(tup)
该工作是否:

from itertools import combinations_with_replacement as cwr
for tup in cwr(range(1, m+1), n):
    do_whatever_with(tup)

您是否考虑过使用内置的
sorted
函数对元组列表进行排序?您可以使用
sorted
函数对列表中的元组进行排序。你的问题不清楚,所以我不能再帮你了。你能提供一个所需输入和输出的例子吗?你需要所有的非递减元组吗?@Joel我做了一个编辑。现在清楚了吗?请尝试排序(元组列表,key=lambda x:(x[0],x[1],x[2])
您是否正在寻找具有替换(范围(1,m+1),n)的组合?(我不是在回答这个问题,因为我认为这可能是个骗局,如果是的话。)您是否考虑过使用内置的
sorted
函数对元组列表进行排序?您可以使用
sorted
函数对列表中的元组进行排序。你的问题不清楚,所以我不能再帮你了。你能提供一个所需输入和输出的例子吗?你需要所有的非递减元组吗?@Joel我做了一个编辑。现在清楚了吗?请尝试排序(元组列表,key=lambda x:(x[0],x[1],x[2])您是否正在寻找具有替换(范围(1,m+1),n)的组合?(我不是在回答这个问题,因为我认为这可能是一个重复,如果是的话。)实际上,我的目标是测试元组的元素之和是否等于它们的乘积,m=2n。对于n的各种值,我必须生成每个元素范围为1到2n的非递减元组,然后我要对它们进行迭代,检查元组的元素之和是否等于它们的乘积。实际上,我的目标是测试元组元素的和是否等于它们的乘积,m=2n。对于n的各种值,我必须生成每个元素范围为1到2n的非递减元组,然后我要对它们进行迭代,检查元组的元素之和是否等于它们的乘积。我想如果效率高的话会更好。嗨,谢谢你的回答。这种方法有多有效?我想对$n的大值进行此操作。$您认为使用此方法可行吗?@SuperMario:这将比过滤
itertools.product
输出更可行,但无论您如何生成这些元组,迭代所有元组都可能是不可行的。嗨,谢谢您的回答。这种方法有多有效?对于$n的大值,我想这样做。$你认为使用这种方法可行吗?@SuperMario:这将比过滤
itertools.product
输出更可行,但不管你如何生成它们,迭代所有这些元组都可能是不可行的。