首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何引用列表中不同范围的值?

如何引用列表中不同范围的值?
EN

Stack Overflow用户
提问于 2015-07-06 18:44:31
回答 3查看 188关注 0票数 4

我想要做的是从一个列表中引用几个不同的范围,即我想要4-6元素,12 -18元素等等。这是我最初的尝试:

代码语言:javascript
复制
test = theList[4:7, 12:18]

我希望它能做同样的事情:

代码语言:javascript
复制
test = theList[4,5,6,12,13,14,15,16,17]

但我有语法错误。做这件事最好/最简单的方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-06 18:45:38

您可以添加这两个列表。

代码语言:javascript
复制
>>> theList = list(range(20))
>>> theList[4:7] + theList[12:18]
[4, 5, 6, 12, 13, 14, 15, 16, 17]
票数 8
EN

Stack Overflow用户

发布于 2015-07-06 18:49:27

您还可以使用itertools模块:

代码语言:javascript
复制
>>> from itertools import islice,chain
>>> theList=range(20)
>>> list(chain.from_iterable(islice(theList,*t) for t in [(4,7),(12,18)]))
[4, 5, 6, 12, 13, 14, 15, 16, 17] 

注意,由于islice在每次迭代中返回一个生成器,它在内存使用方面比列表切片更好。

此外,您还可以使用一个函数进行更多的索引和一般方法。

代码语言:javascript
复制
>>> def slicer(iterable,*args):
...    return chain.from_iterable(islice(iterable,*i) for i in args)
... 
>>> list(slicer(range(40),(2,8),(10,16),(30,38)))
[2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 30, 31, 32, 33, 34, 35, 36, 37]

注意:如果要循环结果,则不需要将结果转换为list

票数 2
EN

Stack Overflow用户

发布于 2015-07-06 18:52:48

如@Bhargav_Rao所述,您可以添加这两个列表。更一般地,您还可以使用列表生成器语法:

代码语言:javascript
复制
test = [theList[i] for i in range(len(theList)) if 4 <= i <= 7 or 12 <= i <= 18]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31253312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档