我正在解决以下问题: 此函数返回L长度为n的所有可能子列表的列表,而不跳过L中的元素。返回列表中的子列表应按它们在L中出现的方式排序,这些子列表从较小的索引开始位于前面清单。
Example 1, if L = [10, 4, 6, 8, 3, 4, 5, 7, 7, 2] and n = 4
然后您的函数应返回列表[[10, 4, 6, 8], [4, 6, 8, 3], [6, 8, 3, 4], [8, 3, 4, 5], [3, 4, 5, 7], [4, 5, 7, 7], [5, 7, 7, 2]]
我的解决方案有效但我怎样才能缩短它?有什么更好的方法呢?
def getSublists(L, n):
newN = n
myList = []
for i in range(len(L)):
orginalLen = L[i:n]
if(len(orginalLen) == n):
myList.append(L[i:n])
n = n + 1
else:
myList.append(L[i:n])
n = n + 1
if(newN == 1):
print(myList)
else:
print(myList[:len(myList)-(n-1)])
getSublists([10, 4, 6, 8, 3, 4, 5, 7, 7, 2],4)
getSublists([1], 1)
getSublists([0, 0, 0, 0, 0], 2)
OUTPUT
[[10, 4, 6, 8], [4, 6, 8, 3], [6, 8, 3, 4], [8, 3, 4, 5], [3, 4, 5, 7], [4, 5, 7, 7], [5, 7, 7, 2]]
[[1]]
[[0, 0], [0, 0], [0, 0], [0, 0]]
答案 0 :(得分:2)
l = [1,2,3,4,5,6,87,9]
n = ..
print [l[i:i+n] for i in range(len(l)-n+1)]
也许你需要。
答案 1 :(得分:2)
在一行中:
get_sublists = lambda ls, n: [ls[x:x+n] for x in range(len(ls)-n+1)]
get_sublists([10, 4, 6, 8, 3, 4, 5, 7, 7, 2], 4)
[[10,4,6,8],[4,6,8,3],[6,8,3,4],[8,3,4,5],[3,4,5] ,7],[4,5,7,7],[5,7,7,2]]
答案 2 :(得分:1)
def get_sublists(L, n):
return [ L[i:i+n] for i in range(len(L)-n) ]
答案 3 :(得分:1)
我完成了对读者更好理解的程序。
def getSublists(L, n):
new_list = []
for i in range(len(L)-n+1):
a = L[i:i+n]
new_list.append(a)
return new_list
回答:
[[10, 4, 6, 8],
[4, 6, 8, 3],
[6, 8, 3, 4],
[8, 3, 4, 5],
[3, 4, 5, 7],
[4, 5, 7, 7],
[5, 7, 7, 2]]
答案 4 :(得分:0)
我认为,理解这个概念非常易读。这里的想法是迭代从0到L的长度减去4的数字。然后从当前索引i中取L的子列表到i + 4。迭代到长度为4可确保您不会尝试访问超出范围的索引!
String type;
int num;
Date date;