我真的找不到这个。我尝试使用itertools,尝试了所有类型的循环,但仍然无法实现我想要的。这就是我需要的:
我有以下列表:
list = [("car", 2), ("plane", 3), ("bike", 1)]
这个列表每次都不同,每次可以有5个不同的项目,我需要的是得到这样的东西:
car1, plane1, bike1
car1, plane2, bike1
car1, plane3, bike1
car2, plane1, bike1
car2, plane2, bike1
car2, plane3, bike1
我真的迷路了。很明显它可能很简单,但我无法解决它。
答案 0 :(得分:7)
您可以使用itertools.product()
:
my_list = [("car", 2), ("plane", 3), ("bike", 1)]
a = itertools.product(*([name + str(i + 1) for i in range(length)]
for name, length in my_list))
for x in a:
print x
打印
('car1', 'plane1', 'bike1')
('car1', 'plane2', 'bike1')
('car1', 'plane3', 'bike1')
('car2', 'plane1', 'bike1')
('car2', 'plane2', 'bike1')
('car2', 'plane3', 'bike1')
答案 1 :(得分:2)
试试这个:
L = [("car", 2), ("plane", 3), ("bike", 1)]
O = []
N = []
for each in L:
O.append(each[0])
N.append(each[1])
for each in O:
strin = ""
for item in N:
strin = strin + item + each + ","
print strin[:-1]
由于您的列表最多只包含五个项目,因此这是一个合理的解决方案。
答案 2 :(得分:1)
您可以使用递归函数实现它:
def combis(ls):
if not ls:
yield []
return
(name, limit) = ls[-1]
for start in combis(ls[:-1]):
for c in range(1, limit+1):
yield start + [(name, c)]
答案 3 :(得分:-1)
为了实现这样的事情,程序的复杂性会非常高。尝试重新设计逻辑,以便降低复杂性。