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