Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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列出任务_Python_List_Tuples - Fatal编程技术网

用Python列出任务

用Python列出任务,python,list,tuples,Python,List,Tuples,我有一个元组,比如(2,5,8) 元组的每个元素都可以取一系列值。例如,第一个位置的范围为0到4,第二个位置的范围为0到6,第三个位置的范围为0到10。我想做的是保持固定的位置2和3,并列出第一个元素的所有组合,不带(2,5,8)。然后,对位置2和3重复相同的操作,并将其添加到列表输出中 我想要的输出是这样的: [ (0,5,8), (1,5,8), (3,5,8), (4,5,8), (2,1,8), (2,2,8), (2,3,8), (2,4,8), (2,6,8), .

我有一个元组,比如(2,5,8)

元组的每个元素都可以取一系列值。例如,第一个位置的范围为0到4,第二个位置的范围为0到6,第三个位置的范围为0到10。我想做的是保持固定的位置2和3,并列出第一个元素的所有组合,不带(2,5,8)。然后,对位置2和3重复相同的操作,并将其添加到列表输出中

我想要的输出是这样的:

[  (0,5,8),  (1,5,8),  (3,5,8),  (4,5,8),
 (2,1,8),  (2,2,8),  (2,3,8),  (2,4,8),  (2,6,8), .. ]
任何关于如何有效完成这项工作的建议都将不胜感激

提前谢谢



编辑:此元组表示系统的状态。我想写一个函数,它以一个元组作为输入,并输出一个包含系统可以转换到的所有可能状态的列表。棘手的部分是转换的动力学,我在上面描述过

你说的高效是什么意思?如果从处理能力的角度来看,您应该使用3个循环将所需内容附加到列表中

result = []
for i in range(5):
    result.append((i, 5, 8))
for i in range(7):
    result.append((2, i, 8))
for i in range(9):
    result.append((2, 5, i))
或者,如果您使用的是Python 3或更高版本的Python 2:

result = [(i, 5, 8) for i in range(5)] + [(2, i, 8) for i in range(7)] + [(2, 5, i) for i in range(9)]
请记住,最后,列表中需要5+8+9=22项,因此您无法编写比for循环更高效的计算

编辑:有关更通用的解决方案:

base = (2, 5, 8)
bounds = ((0, 4), (0, 7), (0, 9))
result = []
for i in range(len(base)):
    result.extend((base[:i] + (j,) + base[i+1:] for j in range(bounds[i][0], bounds[i][1]+1)))

尽管@Ariestinak给出了一个很好的解决方案,但这里有一个可以使用的通用函数:

def getCombinations( a, b, c ):
    result = [(i, b, c) for i in range(5)] + \
             [(a, i, c) for i in range(7)] + \
             [(a, b, i) for i in range(9)]
    return result
然后,要使用它,您所要做的就是:

a = (2,5,8)
getCombinations(*a)

你的动机和可能的价值观范围是什么?解决您的示例(循环最多20次迭代)可能很简单,但如果您实际需要20000次,解决方案会很糟糕。这不是数组,而是我的问题。非常感谢(2,5,8)只是一个例子。一般来说,它可以接受任何值,所以我正在寻找一个更通用的解决方案。有没有办法将它推广到元组中的3个以上元素?我当时的想法是:
对于元组中的每个元素:保持其余元素不变,创建可能的操作
a = (2,5,8)
getCombinations(*a)