Python 按特定顺序查找列表的组合

Python 按特定顺序查找列表的组合,python,python-3.x,list,loops,combinations,Python,Python 3.x,List,Loops,Combinations,我有一个清单,例如 descr_list = ["I","LOVE","DOGS"] 我想要一个循环,可以创建子列表的顺序如下 ["I","LOVE","DOGS"] ["I","LOVE"] ["I"] ["LOVE","DOGS"] ["LOVE"] [

我有一个清单,例如

descr_list = ["I","LOVE","DOGS"]
我想要一个循环,可以创建子列表的顺序如下

["I","LOVE","DOGS"]
["I","LOVE"]
["I"]
["LOVE","DOGS"]
["LOVE"]
["DOGS"]
这是我目前拥有的循环,我得到了下面的输出

for r in range(len(descr_list)):
    for j in range(r+1,len(descr_list)+1):
        result = descr_list[r:j]
        print(result)

['i']
['i', 'love']
['i', 'love', 'dogs']
['love']
['love', 'dogs']
['dogs']

任何帮助都将不胜感激。我知道我以前做过,但我只是不记得我是怎么做的哈哈。我需要从列表中的第一个元素(我们可以称为x)开始,它需要读取它之后的所有元素。然后向后走1个元素,直到它回到自身,然后跳到下一个元素(x+1),重复上述过程,直到到达列表中的最后一个元素。

您可以使用
itertools
获取原始
列表的所有组合:

import itertools

descr_list = ["I","LOVE","DOGS"]

combos = []
for i in range(len(descr_list)):
    combos += list(itertools.combinations(descr_list, i+1))
因此,
组合
是:

[('I',),
 ('LOVE',),
 ('DOGS',),
 ('I', 'LOVE'),
 ('I', 'DOGS'),
 ('LOVE', 'DOGS'),
 ('I', 'LOVE', 'DOGS')]
要获得所需的排序,请查看
组合的每个元素的第一个单词,并找到其在
描述列表中的位置(即
索引()
)。将其用作
排序的
,也可以用作组的长度,以便首先对较长的组合进行优先级排序:

>>> sorted(combos, key=lambda x: (descr_list.index(x[0]), 1/len(x)))

[('I', 'LOVE', 'DOGS'),
 ('I', 'LOVE'),
 ('I', 'DOGS'),
 ('I',),
 ('LOVE', 'DOGS'),
 ('LOVE',),
 ('DOGS',)]

可以使用嵌套循环:

l = len(descr_list)
for i in range(l):
    for j in range(l, i, -1):
        print(f"{descr_list[i:j]} slice from {i} to {j}")

['I', 'LOVE', 'DOGS'] slice from 0 to 3
['I', 'LOVE'] slice from 0 to 2
['I'] slice from 0 to 1
['LOVE', 'DOGS'] slice from 1 to 3
['LOVE'] slice from 1 to 2
['DOGS'] slice from 2 to 3

为了更好地理解,我打印了
I
j

猜测有更好的方法。。。但我认为这应该奏效:

    descr_list = ["I", "LOVE", "DOGS"]
    
    for word_index, word in enumerate(descr_list):
        for i in range(len(descr_list),0,-1):
            if descr_list[word_index:i]:
                result = descr_list[word_index:i]
                print(result)

... 当我在研究我的解决方案时,似乎巴勃罗C想出了一个更好的解决方案。非常感谢@SeanSmith很乐意帮忙!:D
 mylist = ["I","LOVE","DOGS"]

 sentences=[]
 for b in range(len(mylist)):
      for i in range(len(mylist),b,-1):
           sentence=[]
      for j in range(b,i):
            sentence.append(mylist[j])
      sentences.append(sentence)


  print(sentences)

  output:
  [['I', 'LOVE', 'DOGS'], ['I', 'LOVE'], ['I'], ['LOVE', 'DOGS'], ['LOVE'], ['DOGS']]