簡體   English   中英

在python中獲得子列表的更好方法

[英]Better way to get sublist in python

我正在解決以下問題:此函數返回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]]
l = [1,2,3,4,5,6,87,9]
n = ..
print [l[i:i+n] for i in range(len(l)-n+1)]

也許你需要。

一行:

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

def get_sublists(L, n):
    return [ L[i:i+n] for i in range(len(L)-n) ]

我完成了該程序,使讀者有了更好的理解。

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

我認為這很容易理解。 這里的想法是迭代從0到L的長度減去4的數字,然后將L的子列表從當前索引i變為i + 4。 迭代到length-4可以確保您不會嘗試超出范圍的索引!

>>> for i in range(len(L)-4+1):
           print L[i:i+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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM