免责声明:我不是在问如果上限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++) {发布于 2012-07-06 22:59:45
The The The文档这意味着它有一些有用的属性:
word[:2] # The first two characters
word[2:] # Everything except the first two characters下面是切片操作的一个有用的不变量:
s[:i] + s[i:]等于s..。
对于非负索引,如果两个索引都在界限内,则切片的长度是索引的差。例如,word[1:3]是2..。
我认为,为了保持一致性,我们可以假设范围函数的作用是相同的。
发布于 2014-01-31 21:59:44
下面是意见某个Google+用户的:
..。我被半开音程的优雅所打动。特别是当两个切片相邻时,第一个切片的结束索引就是第二个切片的开始索引,这一不变量太漂亮了,无法忽略。例如,假设您将一个字符串在索引i和j处拆分为三个部分--这些部分将是一个:i,ai:j,和一个j:..。
Google+已关闭,因此链接不再起作用。剧透提醒:那是Guido van Rossum。
发布于 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
复制相似问题