免责声明:我不是在问如果上限stop论证slice()和range()是异或方法使用这些函数。
调用range和 slice函数,以及切片表示法[start:stop]
都是指整数集。
range([start], stop[, step])
slice([start], stop[, step])在所有这些中,stop不包括整数。
我想知道为什么这门语言就是这样设计的。
是为了让stop等于表示的整数集合中的元素数start等于0还是省略?
它是不是要有:
for i in range(start, stop):看起来像下面的C代码吗?
for (i = start ; i < stop; i++) {发布于 2018-05-07 16:09:23
雅致VS明快
老实说,我认为Python中的切片方式是非常违反直觉的,它实际上是在交换所谓的优雅有了更多的大脑处理,这就是为什么你可以看到这篇StackOverflow文章有超过2k的支持率,我认为这是因为有很多人一开始就不理解它。
举个例子,下面的代码已经让很多Python新手头疼了。
x = [1,2,3,4]
print(x[0:1])
# Output is [1]它不仅很难处理,而且也很难正确解释,例如,上面代码的解释是
取第0个元素,直到第一个元素之前的元素..。
现在看看Ruby,它使用了包含上限。
x = [1,2,3,4]
puts x[0..1]
# Output is [1,2]坦率地说,我真的认为Ruby的切片方式对大脑更好。
当然,当您根据索引将列表拆分为两部分时,排他上界方法会产生更好看的代码。
# Python
x = [1,2,3,4]
pivot = 2
print(x[:pivot]) # [1,2]
print(x[pivot:]) # [3,4]现在让我们来看看包罗万象的上界方法
# Ruby
x = [1,2,3,4]
pivot = 2
puts x[0..(pivot-1)] # [1,2]
puts x[pivot..-1] # [3,4]显然,代码不那么优雅,但这里没有太多的大脑处理。
结论
归根结底,这实际上是优雅与明显的问题,而Python的设计者更喜欢优雅而不是明显。为什么?因为Python的禅宗声明美丽胜过丑陋
..。
https://stackoverflow.com/questions/11364533
复制相似问题