【问题标题】:Python: all possible combinations of "dynamic" listPython:“动态”列表的所有可能组合
【发布时间】:2011-12-16 09:48:54
【问题描述】:

我真的找不到这个。我尝试使用 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

我真的迷路了。很明显,这可能是非常简单的事情,但我无法解决。

【问题讨论】:

    标签: python list iteration permutation combinations


    【解决方案1】:

    要实现这样的事情,程序的复杂性会非常高。尝试重新设计逻辑,以便降低复杂性..

    【讨论】:

    • 好的,那没有文字的情况呢?只是为了生成特定范围的数字的所有组合?这真的那么难吗?我只是在问,但我认为这不应该那么难。
    • @Anuj 请查看其他答案。这实际上非常简单,并不复杂。
    【解决方案2】:

    你可以用递归函数来实现它:

    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】:

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

      【讨论】:

      • @SvenMarnach:谢谢!这正是我想要的!
      【解决方案4】:

      试试这个:

      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]
      

      由于您的列表最多只包含五个项目,因此这是一个合理的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-14
        • 1970-01-01
        • 2011-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多