在 python 的最短时间内找到列表的所有子列表
Find all sublist of list in minimum time in python
我必须在最短的时间内找到列表的所有子列表
我已经尝试过了,但是它花费了很多时间
X=[]
for i in range(len(N)+1):
for j in range(len(N)+1):
c=N[i:j]
X.append(c)
X2 = [x for x in X if x != []]
使用 itertools
可能比使用嵌套 for 循环更快。
代码
from itertools import chain, combinations
def sublist(ls):
chain_obj = chain.from_iterable(combinations(ls, r) for r in range(1,len(ls)+1))
for i in chain_obj:
print(i)
ls=['1','2','3']
sublist(ls)
输出
('1',)
('2',)
('3',)
('1', '2')
('1', '3')
('2', '3')
('1', '2', '3')
编辑 1
希望这对您有所帮助,
from itertools import combinations
def sublist(ls):
res = [ls[x:y] for x, y in combinations( range(len(ls) + 1), r = 2)]
print(res)
ls=['1','2','3','4']
print(sublist(ls))
输出
[['1'], ['1', '2'], ['1', '2', '3'], ['1', '2', '3', '4'], ['2'], ['2', '3'], ['2', '3', '4'], ['3'], ['3', '4'], ['4']]
我必须在最短的时间内找到列表的所有子列表 我已经尝试过了,但是它花费了很多时间
X=[]
for i in range(len(N)+1):
for j in range(len(N)+1):
c=N[i:j]
X.append(c)
X2 = [x for x in X if x != []]
使用 itertools
可能比使用嵌套 for 循环更快。
代码
from itertools import chain, combinations
def sublist(ls):
chain_obj = chain.from_iterable(combinations(ls, r) for r in range(1,len(ls)+1))
for i in chain_obj:
print(i)
ls=['1','2','3']
sublist(ls)
输出
('1',)
('2',)
('3',)
('1', '2')
('1', '3')
('2', '3')
('1', '2', '3')
编辑 1
希望这对您有所帮助,
from itertools import combinations
def sublist(ls):
res = [ls[x:y] for x, y in combinations( range(len(ls) + 1), r = 2)]
print(res)
ls=['1','2','3','4']
print(sublist(ls))
输出
[['1'], ['1', '2'], ['1', '2', '3'], ['1', '2', '3', '4'], ['2'], ['2', '3'], ['2', '3', '4'], ['3'], ['3', '4'], ['4']]