本问题已经有最佳答案,请猛点这里访问。

与列表扁平化相反。

给定一个列表和一个长度n返回一个长度n子列表的列表。

def sublist(lst, n):

sub=[] ; result=[]

for i in lst:

sub+=[i]

if len(sub)==n: result+=[sub] ; sub=[]

if sub: result+=[sub]

return result

一个例子:

如果列表是:

[1,2,3,4,5,6,7,8]

n是:

3

返回:

[[1, 2, 3], [4, 5, 6], [7, 8]]

有更雄辩/简洁的方式吗?

除此之外,将列表附加到列表时首选的内容(在上面的上下文中):

list1+=[list2]

或:

list1.append(list2)

考虑到这一点(根据SummerFeild的"Python3编程"),它们是相同的?

谢谢。

这样的列表列表可以使用列表理解来构建:

In [17]: seq=[1,2,3,4,5,6,7,8]

In [18]: [seq[i:i+3] for i in range(0,len(seq),3)]

Out[18]: [[1, 2, 3], [4, 5, 6], [7, 8]]

还有Grouper成语:

In [19]: import itertools

In [20]: list(itertools.izip_longest(*[iter(seq)]*3))

Out[20]: [(1, 2, 3), (4, 5, 6), (7, 8, None)]

但请注意,缺少的元素用值none填充。Izip_longst也可以接受fillvalue参数,如果不需要其他参数。

list1+=[list2]——这次注意括号——相当于list1.append(list2)。我写代码的最高优先权是可读性,不是速度。因为这个原因,我会和list1.append(list2)一起去。不过,可读性是主观的,可能很大程度上受您熟悉的习惯用法的影响。

令人高兴的是,在这种情况下,可读性和速度似乎是一致的:

In [41]: %timeit list1=[1,2,3]; list1.append(list2)

1000000 loops, best of 3: 612 ns per loop

In [42]: %timeit list1=[1,2,3]; list1+=[list2]

1000000 loops, best of 3: 847 ns per loop

多谢乌特布,不得不笑这是多么微不足道的清单理解。强调我需要学习它们。关于+=vs-append,我理解区别,注意我比较了list1+=[list2]和list1.append(list2),而不是list1+=list2和list1.append(list2)。谢谢你的回答/讨论。

@迈克尔·帕克特:噢,我误解了你问题的第二部分。编辑。。。

多谢乌特布——附加FTW。:)

以下几点怎么样(你的单子是x)

[x[i:i+3] for i in range(0, len(x), 3)]

这对于n!=3来说是微不足道的概括。

至于你的第二个问题,它们是等价的,所以我认为这是一个风格问题。但是,一定要确保你不会混淆append和extend。

感谢艾克斯,列表理解绝对是一种方式。我很懊恼,我没想到,但我很欣慰,因为我是一个Python的笨蛋。

此函数可以采用任何类型的iterable(不仅是已知长度的序列):

import itertools

def grouper(n, it):

"grouper(3, 'ABCDEFG') --> ABC DEF G"

it = iter(it)

return iter(lambda: list(itertools.islice(it, n)), [])

print(list(grouper(3, [1,2,3,4,5,6,7,8,9,10])))

# [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

谢谢托克兰,很高兴知道。

你听说过boltons吗?

Boltons is a set of pure-Python utilities in the same spirit as — and yet conspicuously missing from — the the standard library

它有你想要的,内置的,叫做chunked。

from boltons import iterutils

iterutils.chunked([1,2,3,4,5,6,7,8], 3)

输出:

[[1, 2, 3], [4, 5, 6], [7, 8]]

在boltons中,更吸引人的是它使用chunked作为迭代器,称为chunked_iter,所以您不需要将整个东西存储在内存中。整洁,对吧?

我认为这个split函数可以完成您想要的工作(尽管它与任何迭代器一起工作,而不仅仅是列表):

from itertools import islice

def take(n, it):

"Return first n items of the iterable as a list"

return list(islice(it, n))

def split(it, size):

it = iter(it)

size = int(size)

ret = take(size, it)

while ret:

yield ret

ret = take(size, it)

编辑:关于你的助手,我总是使用list.append(blah),因为我觉得它更惯用,但我相信它们在功能上是等价的。

Django的东西看起来不必要

@Xavier是的,我已经移除了它(我最初使用它作为django模板过滤器)

谢谢加布里埃尔。

对于某些特定的情况,使用numpy包可能很有用。在此包中,您有一个重塑例程:

import numpy as np

x = np.array([1,2,3,4,5,6])

np.reshape(x, (-1,3))

但是,如果不是n的倍数,这个解决方案不会填充您的列表。

麻木有点过分了。但是,了解所注意到的功能是很好的。谢谢你,小丑。

我知道,这看起来像个脑残,但很有效:

>>> a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

>>> n = 3

>>> [i for j in [[a[t:t+n] for x in a[:1:t+1] if (t%n)==False] for t in range(len(a))] for i in j]

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]

>>> n = 4

>>> [i for j in [[a[t:t+n] for x in a[:1:t+1] if (t%n)==False] for t in range(len(a))] for i in j]

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15]]

python子列表_关于python:创建子列表相关推荐

  1. python如何创建一个列表_使用python中的format()创建一个列表(make a list using format() in python)...

    使用python中的format()创建一个列表(make a list using format() in python) 我是python和编码的新手. 因此,如果已经讨论过这件事,我很抱歉,我无 ...

  2. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  3. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  4. python怎么创建列表_用Python将一个列表分割成小列表的实例讲解 Python 如何创建一个带小数的列表...

    python里有一个列表,列表里有几个小列表,小列表#冒泡排序:scoreList = [['a',98],['c',45],['b',70],['d',85],['h',85],['f',92],[ ...

  5. python如何创建一个列表_在python中创建列表的最佳和/或最快方法

    在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表: 简单循环append: my_list =[]fori inrange(50):my_list.append(0) 简单循 ...

  6. python随机生成二维列表_对python产生随机的二维数组实例详解

    对python产生随机的二维数组实例详解 最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列 ...

  7. python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合

    本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...

  8. python生成序列数(1-10)的立方列表_Python 4.3 创建数值列表(动手试一试)

    4-3数到20:使用一个for循环打印数字1~20(含) 如下: for numbers in range(1,21): (空格)print(numbers) 4-4一百万:创建一个列表,其中数字包含 ...

  9. python将元组转换为列表_使用python将元组转换成列表,并替换其中元素

    原博文 2015-04-30 22:45 − aa = (1, 2, 3, 4, 5, 6) b = [(x == 5 and 8 or x) for x in aa] z = map(lambda ...

  10. python手把手教程_【Python 1-7】Python手把手教程之——详解列表List

    列表 作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) 列表,在其他语言中又被称为数组,是由一系列按特定顺序排列的元素组成.你可以创建包含字母表中所有字母.数字0~9或所有家庭成员姓名 ...

最新文章

  1. 并发的核心:CAS 是什么?Java8是如何优化 CAS 的?
  2. python英文词云代码_使用python实现个性化词云的方法
  3. 平衡二叉树(AVL树)-详解平衡调整
  4. 网易资深Java架构师:疫情对java行业的影响分析
  5. uva 11971 Polygon
  6. HDU 5510 Bazinga 暴力匹配加剪枝
  7. Visual Studio 2008中的jQuery Intellisense
  8. 华为nova7se能云闪付吗_华为迎来转机!联发科“顶替”麒麟芯片,已售罄手机将重获新生...
  9. Linux安装与基本操作命令与JDK的安装,Mysql的安装,Tomcat的安装
  10. html播放器加选集,推荐:非常详细的网页播放器之代码篇(精选集一)
  11. paip. uapi 过滤器的java php python 实现aop filter
  12. Java的jdk安装与环境变量配置
  13. 巨波公第3子登国公后裔在荆州(巨波公6子的后裔,全部水落石出)
  14. 【书单推荐】西方思想史上占有重要地位的100部思想名著
  15. Java中String使用及分析(UTF-8简单编码/解码器实现)
  16. 一.全局定位--开源定位框架LIO-SAM_based_relocalization实录数据集测试
  17. 常见的27个电源符号
  18. 通过两个实例来理解 devtool: 'source-map' 是什么意思
  19. navicat 表合并查询_数据库两个表合并命令
  20. [TL-WDR7300] 如何当作交换机使用?

热门文章

  1. JS返回前一页(或关闭本页面,返回首页)
  2. 目标感强的人究竟有多厉害,我们采访了100位牛人
  3. 新能源汽车:选择“内卷”还是抓住大势东风?
  4. 经验分享 | 我的八股文学习路线及攻略
  5. 【RFC6582 TCP快速恢复算法的NewReno修改】(翻译)
  6. POJ 1375 Intervals
  7. 用python播放声音文件(mp3、wav、m4a等)
  8. “新基遇 星生态 心未来” 星际无限&神算云全球发布暨表彰盛典在深顺利召开
  9. 难道我买了一个假路由器?解决光猫引出的路由器网速很慢的问题
  10. OpenMP 快速入门