gpt4 book ai didi

python - __getitem__ 列表列表中的切片

转载 作者:行者123 更新时间:2023-11-28 21:57:18 25 4
gpt4 key购买 nike

我正在创建一个表示列表列表的类。 __getitem__ 让我头疼。在我将切片作为参数引入之前,一切都进行得很顺利。

演示代码

# Python version 2.7.5

class NestedLists:
_Cells = [['.', '.', '.', '.', '.'],
['.', '.', 'N', '.', '.'],
['.', 'C', 'A', 'T', '.'],
['.', '.', 'P', '.', '.'],
['.', '.', '.', '.', '.']]

def __getitem__(self, index):
if isinstance(index, int):
return self._Cells[index]
elif isinstance(index, slice):
return self._Cells[index]
else:
raise TypeError, "Invalid argument type"

nested = NestedLists()

print "Expecting A"
print nested[2][2]

print "Expecting CAT"
print nested[2][1:4]

print "Expecting ..N.."
print " .CAT."
print " ..P.."
print nested[1:4]

print "Expecting .N."
print " CAT"
print " .P."
print nested[1:4][1:4]

输出如下

Expecting A
A
Expecting CAT
['C', 'A', 'T']
Expecting ..N..
.CAT.
..P..
[['.', '.', 'N', '.', '.'], ['.', 'C', 'A', 'T', '.'], ['.', '.', 'P', '.', '.']]
Expecting .N.
CAT
.P.
[['.', 'C', 'A', 'T', '.'], ['.', '.', 'P', '.', '.']]

显然,正在发生的是第二个 [] 运算符调用被应用于第一个的输出......但停留在最外层列表的上下文中。然而,解决方案让我望而却步。

最佳答案

您可能希望将多维访问的语法从 obj[row][col] 更改为使用单个元组索引:obj[row, col]。这是 numpyndarray 类型使用的格式,它非常有用,因为它可以让您一次看到索引的所有维度。您可以编写一个 __getitem__ 来允许在任何维度上进行切片:

def __getitem__(self, index):
row, col = index
if isinstance(row, int) and isinstance(col, (int, slice)):
return self._Cells[row][col]
elif isinstance(row, slice) and isinstance(col, (int, slice)):
return [r[col] for r in self._Cells[row]]
else:
raise TypeError, "Invalid argument type"

关于python - __getitem__ 列表列表中的切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20032493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com