python子列表_关于python:创建子列表
本问题已经有最佳答案,请猛点这里访问。
与列表扁平化相反。
给定一个列表和一个长度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:创建子列表相关推荐
- python如何创建一个列表_使用python中的format()创建一个列表(make a list using format() in python)...
使用python中的format()创建一个列表(make a list using format() in python) 我是python和编码的新手. 因此,如果已经讨论过这件事,我很抱歉,我无 ...
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python怎么创建列表_用Python将一个列表分割成小列表的实例讲解 Python 如何创建一个带小数的列表...
python里有一个列表,列表里有几个小列表,小列表#冒泡排序:scoreList = [['a',98],['c',45],['b',70],['d',85],['h',85],['f',92],[ ...
- python如何创建一个列表_在python中创建列表的最佳和/或最快方法
在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表: 简单循环append: my_list =[]fori inrange(50):my_list.append(0) 简单循 ...
- python随机生成二维列表_对python产生随机的二维数组实例详解
对python产生随机的二维数组实例详解 最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列 ...
- python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合
本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...
- python生成序列数(1-10)的立方列表_Python 4.3 创建数值列表(动手试一试)
4-3数到20:使用一个for循环打印数字1~20(含) 如下: for numbers in range(1,21): (空格)print(numbers) 4-4一百万:创建一个列表,其中数字包含 ...
- 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 ...
- python手把手教程_【Python 1-7】Python手把手教程之——详解列表List
列表 作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) 列表,在其他语言中又被称为数组,是由一系列按特定顺序排列的元素组成.你可以创建包含字母表中所有字母.数字0~9或所有家庭成员姓名 ...
最新文章
- 并发的核心:CAS 是什么?Java8是如何优化 CAS 的?
- python英文词云代码_使用python实现个性化词云的方法
- 平衡二叉树(AVL树)-详解平衡调整
- 网易资深Java架构师:疫情对java行业的影响分析
- uva 11971 Polygon
- HDU 5510 Bazinga 暴力匹配加剪枝
- Visual Studio 2008中的jQuery Intellisense
- 华为nova7se能云闪付吗_华为迎来转机!联发科“顶替”麒麟芯片,已售罄手机将重获新生...
- Linux安装与基本操作命令与JDK的安装,Mysql的安装,Tomcat的安装
- html播放器加选集,推荐:非常详细的网页播放器之代码篇(精选集一)
- paip. uapi 过滤器的java php python 实现aop filter
- Java的jdk安装与环境变量配置
- 巨波公第3子登国公后裔在荆州(巨波公6子的后裔,全部水落石出)
- 【书单推荐】西方思想史上占有重要地位的100部思想名著
- Java中String使用及分析(UTF-8简单编码/解码器实现)
- 一.全局定位--开源定位框架LIO-SAM_based_relocalization实录数据集测试
- 常见的27个电源符号
- 通过两个实例来理解 devtool: 'source-map' 是什么意思
- navicat 表合并查询_数据库两个表合并命令
- [TL-WDR7300] 如何当作交换机使用?