我如何引用列表中不同范围的值?
How do i reference values from various ranges within a list?
我想要做的是从一个列表中引用几个不同的范围,即我想要第 4-6 个元素、第 12-18 个元素等。这是我最初的尝试:
test = theList[4:7, 12:18]
我希望提供的功能与以下内容相同:
test = theList[4,5,6,12,13,14,15,16,17]
但是我遇到语法错误。 best/easiest 的方法是什么?
您可以添加这两个列表。
>>> theList = list(range(20))
>>> theList[4:7] + theList[12:18]
[4, 5, 6, 12, 13, 14, 15, 16, 17]
你也可以使用itertools
模块:
>>> 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
returns 生成器在每次迭代中都比列表切片在内存使用方面表现更好。
您也可以使用一个函数来获取更多索引和通用方法。
>>> 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
!
您可以按照@Bhargav_Rao 所述添加两个列表。更一般地,您还可以使用列表生成器语法:
test = [theList[i] for i in range(len(theList)) if 4 <= i <= 7 or 12 <= i <= 18]
我想要做的是从一个列表中引用几个不同的范围,即我想要第 4-6 个元素、第 12-18 个元素等。这是我最初的尝试:
test = theList[4:7, 12:18]
我希望提供的功能与以下内容相同:
test = theList[4,5,6,12,13,14,15,16,17]
但是我遇到语法错误。 best/easiest 的方法是什么?
您可以添加这两个列表。
>>> theList = list(range(20))
>>> theList[4:7] + theList[12:18]
[4, 5, 6, 12, 13, 14, 15, 16, 17]
你也可以使用itertools
模块:
>>> 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
returns 生成器在每次迭代中都比列表切片在内存使用方面表现更好。
您也可以使用一个函数来获取更多索引和通用方法。
>>> 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
!
您可以按照@Bhargav_Rao 所述添加两个列表。更一般地,您还可以使用列表生成器语法:
test = [theList[i] for i in range(len(theList)) if 4 <= i <= 7 or 12 <= i <= 18]