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