将python列表拆分为其他“子列表”,即更小的列表[重复]
- 2025-03-05 09:14:00
- admin 原创
- 93
问题描述:
我有一个包含 1000 个字符的 Python 列表。例如:
data=["I","am","a","python","programmer".....]
其中,len(数据)= 1003
我现在想通过将原始列表拆分成 100 个块来创建此列表(数据)的子集。因此,最后我想要得到类似这样的内容:
data_chunk1=[.....] #first 100 items of list data
data_chunk2=[.....] #second 100 items of list data
.
.
.
data_chunk11=[.....] # remainder of the entries,& its len <=100, len(data_chunk_11)=3
有没有一种 Python 式的方法来完成这项任务?显然我可以使用 data[0:100] 等等,但我认为这非常不符合 Python 式,而且效率很低。
非常感谢。
解决方案 1:
我想说
chunks = [data[x:x+100] for x in range(0, len(data), 100)]
xrange()
如果您使用的是 python 2.x 而不是 3.x,则可以通过使用将上述代码更改为以下内容来提高内存效率:
chunks = [data[x:x+100] for x in xrange(0, len(data), 100)]
解决方案 2:
实际上我认为在这种情况下使用普通切片是最好的解决方案:
for i in range(0, len(data), 100):
chunk = data[i:i + 100]
...
如果您想避免复制切片,您可以使用itertools.islice()
,但这里似乎没有必要。
该itertools()
文档还包含著名的“石斑鱼”模式:
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
您需要对其进行修改以正确处理最后一块,因此我认为使用普通切片的直接解决方案是更好的选择。
解决方案 3:
chunks = [data[100*i:100*(i+1)] for i in range(len(data)/100 + 1)]
这相当于可接受的答案。例如,为了便于阅读,缩短为 10 个批次:
data = range(35)
print [data[x:x+10] for x in xrange(0, len(data), 10)]
print [data[10*i:10*(i+1)] for i in range(len(data)/10 + 1)]
输出:
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34]]
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34]]
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD