为了账号安全,请及时绑定邮箱和手机立即绑定

将列表切成多个切片

将列表切成多个切片

泛舟湖上清波郎朗 2023-07-18 16:28:21
我正在寻找将列表分成两个或多个切片。例如,有一个列表: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]
查看完整描述

6 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

您可以使用list.extend来完成此任务。

slice1 = a[1:5]
slice2 = a[6:10]
slice1.extend(slice2)
# now use slice1

它将 slice2 的所有项目附加到第一个 slice1。


查看完整回答
反对 回复 2023-07-18
?
慕容3067478

TA贡献1773条经验 获得超3个赞

如果您想避免为各个切片创建中间列表,您可以使用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 元组,仅用于结束或开始-结束步骤切片。


查看完整回答
反对 回复 2023-07-18
?
慕的地10843

TA贡献1785条经验 获得超8个赞

没有特殊的语法,只需附加列表切片即可:


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])


查看完整回答
反对 回复 2023-07-18
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

我认为以下可能是最有效的方法:

all_slice = [*a[1:5], *a[6:10]]

哪里all_slice持有:

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

这看起来很Pythonic。


查看完整回答
反对 回复 2023-07-18
?
PIPIONE

TA贡献1829条经验 获得超9个赞

受到答案的启发:

没有特殊的语法,只需附加列表切片即可:

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

打印(a[1:5]+a[6:10])

                                           FROM -> Aviv Yaniv

b、a = a[1:5]、a[6:10]

打印(b+a)


查看完整回答
反对 回复 2023-07-18
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

如果您尝试分割多个范围,则可以使用带有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]


查看完整回答
反对 回复 2023-07-18
  • 6 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信