将列表切成多个切片

我正在寻找将列表分成两个或多个切片。例如,有一个列表:

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

假设我想将列表分为项目 1 到 4 和 6 到 9。

如果我们这样做:

a[1:5]

输出:

[1, 2, 3, 4]

如果我们这样做:

a[6:10]

输出是:

[6, 7, 8, 9]

但有没有办法组合多个切片。就像是:

a[1:5 and 6:10]

输出:

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


泛舟湖上清波郎朗
浏览 155回答 6
6回答

DIEA

您可以使用list.extend来完成此任务。slice1 = a[1:5] slice2 = a[6:10] slice1.extend(slice2) # now use slice1它将 slice2 的所有项目附加到第一个 slice1。

慕容3067478

如果您想避免为各个切片创建中间列表,您可以使用itertools.isliceandchain.from_iterable来获取切片并将其组合为迭代器。>>> from itertools import chain, islice>>> slc = [(1,5), (6,10)]>>> list(chain.from_iterable(islice(a, *s) for s in slc))[1, 2, 3, 4, 6, 7, 8, 9]也适用于 1 元组或 3 元组,仅用于结束或开始-结束步骤切片。

慕的地10843

没有特殊的语法,只需附加列表切片即可:a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# [1, 2, 3, 4, 6, 7, 8, 9]print(a[1:5]+a[6:10])

哆啦的时光机

我认为以下可能是最有效的方法:all_slice = [*a[1:5], *a[6:10]]哪里all_slice持有:[1, 2, 3, 4, 6, 7, 8, 9]这看起来很Pythonic。

PIPIONE

受到答案的启发:没有特殊的语法,只需附加列表切片即可:a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]打印(a[1:5]+a[6:10])                                           FROM -> Aviv Yanivb、a = a[1:5]、a[6:10]打印(b+a)

胡子哥哥

如果您尝试分割多个范围,则可以使用带有slice()列表理解的内置函数:a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]ranges = [(1, 5), (6, 10)]   [n for s in ranges for n in a[slice(*s)]]# [1, 2, 3, 4, 6, 7, 8, 9]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python