为什么 slice(10, 50, 2).indices(10) return (10, 10, 2)?
Why does slice(10, 50, 2).indices(10) return (10, 10, 2)?
#!/usr/bin/python
# 1.11. Naming a Slice
# Problem: Your program has become an unreadable mess of
# hardcoded slice indices and you want to clean it up.
###### 0123456789012345678901234567890123456789012345678901234567890'
record = '....................100 .......513.25 ..........'
cost = int(record[20:32]) * float(record[40:48])
print (cost)
# name the slices
SHARES = slice(20,32)
PRICE = slice(40,48)
cost = int(record[SHARES]) * float(record[PRICE])
print (cost)
items = [0, 1, 2, 3, 4, 5, 6]
a = slice(2, 4)
print (items[2:4])
print (items[a])
items[a] = [10,11]
print (items)
del items[a]
print (items)
a = slice(10, 50, 2)
print (a.start, a.stop, a.step)
s = 'HelloWorld'
indice = a.indices(len(s))
print (indice)
for i in range(*a.indices(len(s))):
print(s[i])
这是 Python Cookbook 第 1.11 章中的示例。
print (indices)
这应该给我 (5,10,2)
但它给了我 (10,10,2)
。然后下面的for循环没有打印任何东西。
为什么我的代码显示的结果和书上的不一样?
这其实是书上的错误。如果您检查 errata 并向下滚动到第 19 页,则有这样的描述:
This example "a.indices(len(s))" leads to output that differs from the output as printed in the book, assuming the slice a is the slice a as shown in the example just above. It would work in the way shown, if a were slice(5, 50, 2) or so. Or am I wrong?
Note from the Author or Editor:
Change example mid-page to this:
>>> a = slice(5, 50, 2)
>>> a.start
5
>>> a.stop
50
>>> a.step
2
>>>
Problematic example at bottom should then work.
#!/usr/bin/python
# 1.11. Naming a Slice
# Problem: Your program has become an unreadable mess of
# hardcoded slice indices and you want to clean it up.
###### 0123456789012345678901234567890123456789012345678901234567890'
record = '....................100 .......513.25 ..........'
cost = int(record[20:32]) * float(record[40:48])
print (cost)
# name the slices
SHARES = slice(20,32)
PRICE = slice(40,48)
cost = int(record[SHARES]) * float(record[PRICE])
print (cost)
items = [0, 1, 2, 3, 4, 5, 6]
a = slice(2, 4)
print (items[2:4])
print (items[a])
items[a] = [10,11]
print (items)
del items[a]
print (items)
a = slice(10, 50, 2)
print (a.start, a.stop, a.step)
s = 'HelloWorld'
indice = a.indices(len(s))
print (indice)
for i in range(*a.indices(len(s))):
print(s[i])
这是 Python Cookbook 第 1.11 章中的示例。
print (indices)
这应该给我 (5,10,2)
但它给了我 (10,10,2)
。然后下面的for循环没有打印任何东西。
为什么我的代码显示的结果和书上的不一样?
这其实是书上的错误。如果您检查 errata 并向下滚动到第 19 页,则有这样的描述:
This example "a.indices(len(s))" leads to output that differs from the output as printed in the book, assuming the slice a is the slice a as shown in the example just above. It would work in the way shown, if a were slice(5, 50, 2) or so. Or am I wrong?
Note from the Author or Editor: Change example mid-page to this:
>>> a = slice(5, 50, 2) >>> a.start 5 >>> a.stop 50 >>> a.step 2 >>>
Problematic example at bottom should then work.