python-3.x - 在 __getitem() 中使用切片
问题描述
我有一个利用浮动范围的类。除了我的getitem () 方法外,一切正常。我正在尝试遵循这一点:
就调用它而言,这就是它需要做的事情:
>>> my_range = float_range(0.5, 7, 0.75)
>>> list(my_range[:2])
[0.5, 1.25]
>>> list(my_range[-1:100])
[6.5]
>>> list(my_range[-3:])
[5.0, 5.75, 6.5]
>>> list(my_range[::2])
[0.5, 2.0, 3.5, 5.0, 6.5]
到目前为止我的代码:
from math import ceil
class float_range:
def __init__(self, start, stop=None, step=1.0):
if stop is None:
start, stop = 0, start
(self.start, self.stop, self.step) = (start, stop, step)
def __len__(self):
return max(ceil((self.stop-self.start) / self.step), 0)
def __iter__(self):
i = self.start
for _ in range(len(self)):
yield i
i += self.step
def __reversed__(self):
i = self.start + (len(self)-1) * self.step
for _ in range(len(self)):
yield i
i -= self.step
def __getitem__(self, given):
if isinstance(given, slice):
i = self.start
for _ in range(self.stop):
yield i
i += self.step
for n in float_range(0.5, 2.5, 0.5):
print(n)
print(list(float_range(3.5, 0, -1)))
for n in float_range(0.0, 3.0):
print(n)
for n in float_range(3.0):
print(n)
print(len(float_range(0.5, 2.5, 0.5)))
print(list(reversed(float_range(0.5, 2.5, 0.5))))
floater = float_range(1, 10, 2)
print(len(floater))
for item in floater:
print(item)
reverse_range = reversed(float_range(0.5, 7, 0.75))
print(list(reverse_range))
# [6.5, 5.75, 5.0, 4.25, 3.5, 2.75, 2.0, 1.25, 0.5]
my_range = float_range(0.5, 7, 0.75)
print(list(my_range[:2]))
我知道我的 __getitem() 方法中的 for 循环是错误的,但我只是不明白如何让它停止使用传入的切片表示法。
输出:
0.5
1.0
1.5
2.0
[3.5, 2.5, 1.5, 0.5]
0.0
1.0
2.0
0
1.0
2.0
4
[2.0, 1.5, 1.0, 0.5]
5
1
3
5
7
9
[6.5, 5.75, 5.0, 4.25, 3.5, 2.75, 2.0, 1.25, 0.5]
[0.5, 1.25, 2.0, 2.75, 3.5, 4.25, 5.0]
解决方案
推荐阅读
- orbeon - 在 Orbeon 表单中添加自定义控制设置选项卡
- typescript - Visual Studio 2019 显示 Power Apps CLI 生成的 TypeScript 文件的 ESLint 错误
- kubernetes - 在 Kubernetes pod 上运行 Arango Shell (Arangosh)
- python - 当我合并两个列表并将新列表放入几个函数时。有没有办法确定特定值来自哪个原始列表?
- json - 文件作为计数变量,terraform
- mysql - pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'db'
- reactjs - 当前用户的 uid 的 Firebase 查询给出了当前用户为空的错误
- python - 想知道这个makefile是什么意思
- python - TypeError: 'tuple' object is not callable 解决方案 - pyautogui
- java - java Combo Auto Complete 搜索数据在 jdk 9 上运行顺畅,但在 jdk 8 上运行缓慢