如何在Python3中将列表拆分为嵌套列表?

如何在Python3中将列表拆分为嵌套列表?,python,python-3.x,Python,Python 3.x,我想将列表拆分为嵌套列表。我的清单如下: [1,2,1,3,2] 现在,我希望输出如下: [[1,2],[2,1],[1,3],[3,2]] 有没有可能像上面提到的那样进行输出?您可以使用zip lst = [1,2,1,3,2] res = [list(pair) for pair in zip(lst, lst[1:])] print(res) # -> [[1, 2], [2, 1], [1, 3], [3, 2]] 注意:不必对zip中的lst的第一个实例进行切片,因为它

我想将列表拆分为嵌套列表。我的清单如下:

[1,2,1,3,2]
现在,我希望输出如下:

[[1,2],[2,1],[1,3],[3,2]]

有没有可能像上面提到的那样进行输出?

您可以使用
zip

lst = [1,2,1,3,2]

res = [list(pair) for pair in zip(lst, lst[1:])]
print(res)  # -> [[1, 2], [2, 1], [1, 3], [3, 2]]
注意:不必对
zip
中的
lst
的第一个实例进行切片,因为它是指示将生成的元组数的两个实例中最小的一个


正如@Jean FrancoisFabre在评论中所说,如果原始列表很大,您可能希望使用生成器而不是硬切片


这种方法的好处(或前一种方法的缺点)是
zip
lst[1://code>)中使用的第二个列表不是在内存中创建的,但您需要
导入itertools
,它才能工作。

您可以使用
zip

lst = [1,2,1,3,2]

res = [list(pair) for pair in zip(lst, lst[1:])]
print(res)  # -> [[1, 2], [2, 1], [1, 3], [3, 2]]
注意:不必对
zip
中的
lst
的第一个实例进行切片,因为它是指示将生成的元组数的两个实例中最小的一个


正如@Jean FrancoisFabre在评论中所说,如果原始列表很大,您可能希望使用生成器而不是硬切片

这种方法的好处(或前一种方法的缺点)是
zip
lst[1://code>)中使用的第二个列表不是在内存中创建的,但您需要
导入itertools
,它才能工作。

您正在寻找的。下面是一个从序列生成n-gram的通用函数

def ngrams(seq, n):
    return [seq[i:i + n] for i in range(len(seq) - n + 1)]

a = [1,2,1,3,2]

print ngrams(a, 2)

# [[1, 2], [2, 1], [1, 3], [3, 2]]
你在找我。下面是一个从序列生成n-gram的通用函数

def ngrams(seq, n):
    return [seq[i:i + n] for i in range(len(seq) - n + 1)]

a = [1,2,1,3,2]

print ngrams(a, 2)

# [[1, 2], [2, 1], [1, 3], [3, 2]]

您正在查找输入的所有组合(2项)?您正在查找输入的所有组合(2项)?python3没有
xrange
generatorExcellent滑动窗口!python3没有
xrange
generatorExcellent滑动窗口!第二个参数可以使用
itertools.islice(lst,1,None)
避免硬切片。
[list(pair)for pair in zip(lst,itertools.islice(lst,1,None))]
:没有额外的列表创建我不完全相信
islice
的好处。。请看,我假设存在一个列表长度
n
,在该长度以上,
itertools.islice
的性能更好。以后可能会运行一些检查以确定
n
是什么。谢谢你的链接!第二个参数可以使用
itertools.islice(lst,1,None)
避免硬切片。
[list(pair)for pair in zip(lst,itertools.islice(lst,1,None))]
:没有额外的列表创建我不完全相信
islice
的好处。。请看,我假设存在一个列表长度
n
,在该长度以上,
itertools.islice
的性能更好。以后可能会运行一些检查以确定
n
是什么。谢谢你的链接!