簡體   English   中英

Python:“動態”列表的所有可能組合

[英]Python: all possible combinations of “dynamic” list

我真的找不到這個。 我嘗試使用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

我真的迷路了。 很明顯它可能很簡單,但我無法解決它。

你可以使用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')

試試這個:

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]

由於您的列表最多只包含五個項目,因此這是一個合理的解決方案。

您可以使用遞歸函數實現它:

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)]

為了實現這樣的事情,程序的復雜性將非常高。 嘗試重新設計邏輯,以便減少復雜性..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM