我需要从数组中的多个位置提取数据。
一个简单的数组是: -
listing = (4, 22, 24, 34, 46, 56)
我熟悉切片。例如: -
listing[0:3]
会给我: -
(4, 22, 24)
但是我无法获得多个切片。例如: -
listing[0:3, 4:5]
给了我
TypeError: tuple indices must be integers not tuples
尽管搜索了两本Python书籍和互联网,但我无法确定要使用的语法。
答案 0 :(得分:9)
您可以切片两次并加入它们。
listing[0:3] + listing[4:5]
答案 1 :(得分:2)
这是Friedrich的惊人答案的稍微改进的版本。在这里:
class Advanced_List():
def __init__(self, *args, is_list = True):
self.array = list(args) if is_list else args
self.islist = is_list
def __iter__(self):
yield from self.array
def __getitem__(self, slices):
return sum([[self.array[s]] if type(s) == int else self.array[s] for s in slices], []) if type(slices) == tuple else self.array[slices] #No more multidimensional shorthand!
def __str__(self):
return str(self.array)
def __repr__(self):
return str(self)[1:-1]
#Look at the __getitem__ method
更改了__getitem__
行。现在,单个切片不需要逗号!
答案 2 :(得分:1)
尝试:
>>> listing = (4, 22, 24, 34, 46, 56)
>>> listing[0:3], listing[4:5]
((4, 22, 24), (46,))
答案 3 :(得分:1)
如果您具有切片的索引号,则可以使用列表中包含的循环来获取它们。
index_nums = [0,2,4]
output = [listing[val] for val in index_nums]
这将返回[4,24,46]
答案 4 :(得分:1)
在上课时,您可以这样做
class Listing():
def __init__(self, *args):
self.array = args
def __getitem__(self, slices):
return sum((self.array[s] for s in slices), ())
listing = Listing(4, 22, 24, 34, 46, 56)
listing[0:3, 4:5] # (4, 22, 24, 46)
结构sum((...), ())
连接元组(()+()+()
),因此将输出flattens连接起来。
答案 5 :(得分:0)
我需要这种精确的构造来应对大熊猫的情况。我使用了辅助生成器。
Python 3.7.4 (v3.7.4:e09359112e, Jul 8 2019, 14:54:52)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> listing = (4, 22, 24, 34, 46, 56)
>>> def multislice(a,sl):
... for si in sl:
... yield a[si]
...
>>> list(multislice(listing,[slice(0,3),slice(4,5)]))
[(4, 22, 24), (46,)]
通过扩展,如何做很多不同的切片。
>>> list(multislice(listing,[slice(0,3),slice(4,5),slice(3,None)]))
[(4, 22, 24), (46,), (34, 46, 56)]
答案 6 :(得分:0)
处理 numpy
数组时,可以使用 np.r_
生成索引
>>> np.array([4, 22, 24, 34, 46, 56])[np.r_[0:3, 4:5]]
array([ 4, 22, 24, 46])
这可以处理表单的多个切片,如 1
、0:3
、:3
或 -3:-1
,但不正确的是 :
、{{1} } 或 1:
, -3:
.