【问题标题】:python list all combiniations without itertoolspython列出没有itertools的所有组合
【发布时间】:2017-03-30 15:34:39
【问题描述】:
  • 我只想把列表的所有组合(两种尺寸)
  • 例如:输入= [1, 2, 3] => 输出= [[1,2], [1,3], [2,3]]
  • 如何使这段代码更简洁?(单行?)
  • 这并不意味着列表理解。

我的代码

def all_combinations(input_lst):
    return_lst=[]
    for i in range(0, len(input_lst)-1):
        for j in range(i+1, len(input_lst)):
            return_lst.append([input_lst[i], input_lst[j]])
    return return_lst

【问题讨论】:

    标签: python combinations


    【解决方案1】:
    [(input_lst[i], input_lst[j]) for i in xrange(len(input_lst) - 1) for j in xrange(i + 1, len(input_lst))]
    

    【讨论】:

      【解决方案2】:
      l = [1,2,3,4,]
      => [(2, 1), (3, 1), (4, 1), (3, 2), (4, 2), (4, 3)]
      

      1。使用enumerate

      [ (x,y) for (i,y) in enumerate(l)  for x in l[i+1:] ]
      

      2。使用index

      [ (x,y) for y in l  for x in l[l.index(y)+1:] ]
      

      【讨论】:

      • 使用enumerate 的示例在您使用l[i + 1:] 时会创建不必要的l 副本。第二个示例在l 中对y 进行线性搜索,并创建l 的副本。
      • @letmutx 哦,我错过了。感谢您的评论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多