Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将num列表拆分为具有连续数字的子列表_Python_List_Numbers_Nested Lists - Fatal编程技术网

Python 将num列表拆分为具有连续数字的子列表

Python 将num列表拆分为具有连续数字的子列表,python,list,numbers,nested-lists,Python,List,Numbers,Nested Lists,我想将数字列表中的数字分组到子列表中。子列表中必须是连续的数字 输入==>[-4,-3,-2,0,1,3,5,6,7,17,18,30] 输出==>[[-4,-3,-2],[0,1],[3],[5,6,7],[17,18],[30] 最好不使用库(仅泛型)来实现这一点,只需使用for循环即可。一个过程是我们能做的最好的-我们必须看每个元素一次。这是O(n)英寸 请记住,必须对列表进行排序,否则它将无法工作 代码: 输出: 双指针解 a = [-4,-3,-2,0,1,3,5,6,7,17,18,

我想将数字列表中的数字分组到子列表中。子列表中必须是连续的数字

输入==>
[-4,-3,-2,0,1,3,5,6,7,17,18,30]
输出==>
[[-4,-3,-2],[0,1],[3],[5,6,7],[17,18],[30]


最好不使用库(仅泛型)

来实现这一点,只需使用for循环即可。一个过程是我们能做的最好的-我们必须看每个元素一次。这是O(n)英寸

请记住,必须对列表进行排序,否则它将无法工作

代码: 输出: 双指针解

a = [-4,-3,-2,0,1,3,5,6,7,17,18,30]
slow, fast = 0,0
ans, temp = [], []
while fast < len(a):
    if fast - slow == a[fast] - a[slow]:
        temp.append(a[fast])
        fast += 1
    else:
        slow = fast
        ans.append(temp)
        temp = []
if fast > slow:
    ans.append(temp)
print(ans)
a=[-4,-3,-2,0,1,3,5,6,7,17,18,30]
慢,快=0,0
ans,温度=[],[]
当fast慢速:
ans.append(临时)
打印(ans)

生成器可以很好地处理这类事情

代码 输出 笔记
如果输入列表中有重复项,它会将它们放在同一个子列表中。

您可以一次通过而不用库
>>> rv
[[-4, -3, -2], [0, 1], [3], [5, 6, 7], [17, 18], [30]]
a = [-4,-3,-2,0,1,3,5,6,7,17,18,30]
slow, fast = 0,0
ans, temp = [], []
while fast < len(a):
    if fast - slow == a[fast] - a[slow]:
        temp.append(a[fast])
        fast += 1
    else:
        slow = fast
        ans.append(temp)
        temp = []
if fast > slow:
    ans.append(temp)
print(ans)
def group_me(list):
    list.sort()
    sublist = []

    while list:
        v = list.pop(0)

        if not sublist or sublist[-1] in [v, v-1]:
            sublist.append(v)
        else:
            yield sublist
            sublist = [v]

    if sublist:
        yield sublist


list = [-4, -3, -2, 0, 1, 3, 5, 6, 7, 17, 18, 30]
result = [sublist for sublist in group_me(list)]
print(result)
[[-4, -3, -2], [0, 1], [3], [5, 6, 7], [17, 18], [30]]