这对我来说不时出现:我有一些C#代码非常想要range()
Python中可用的功能.
我知道使用
for (int i = 0; i < 12; i++)
{
// add code here
}
Run Code Online (Sandbox Code Playgroud)
但是这会在功能用法中降低,就像我想要做一个Linq Sum()
而不是写上面的循环一样.
有没有内置?我想我可以永远只是推出自己用yield
还是这样,但是这将是如此得心应手,只是有.
我想知道是否可以在不将循环迭代次数存储在任何地方的情况下执行一定数量的操作.
例如,假设我想将两条"hello"
消息打印到控制台.现在我知道我能做到:
for i in range(2):
print "hello"
Run Code Online (Sandbox Code Playgroud)
但随后的i
变量是要采取的价值观0
和1
(我并不真的需要).有没有办法实现同样的事情而不将这些不需要的值存储在任何地方?
在Javascript中是否有类似于ruby的数组[n..m]?
例如:
>> a = ['a','b','c','d','e','f','g']
>> a[0..2]
=> ['a','b','c']
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在使用该range()
函数来创建一个数组.但是,我希望它keys
与之相同value
.当我range(0, 10)
从索引开始时这样做是可以的0
,但是如果我这样做range(1, 11)
,索引仍然会从索引开始0
,所以0=>1
当我想要它时它会结束1=>1
我如何使用range()
创建一个key
与value
?相同的数组?
我在一个领域工作,其中范围通常包含在内.我有人类可读的描述,例如from A to B
,代表包括两个端点的范围 - 例如from 2 to 4
手段2, 3, 4
.
在Python代码中使用这些范围的最佳方法是什么?以下代码用于生成包含的整数范围,但我还需要执行包含切片操作:
def inclusive_range(start, stop, step):
return range(start, (stop + 1) if step >= 0 else (stop - 1), step)
Run Code Online (Sandbox Code Playgroud)
唯一的完整的解决方案我看到的是明确使用+ 1
(或- 1
)我每次使用时间range
或切片符号(例如range(A, B + 1)
,l[A:B+1]
,range(B, A - 1, -1)
).这种重复是否真的是与包容性范围一起工作的最佳方式?
编辑:感谢L3viathan的回答.编写inclusive_slice
函数来补充inclusive_range
当然是一种选择,尽管我可能会写如下:
def inclusive_slice(start, stop, step):
...
return slice(start, (stop + 1) if step >= 0 else (stop …
Run Code Online (Sandbox Code Playgroud) 我希望返回该数字,只要它在一个限制内,否则返回限制的最大值或最小值.我可以用Math.min
和组合来做到这一点Math.max
.
public int limit(int value) {
return Math.max(0, Math.min(value, 10));
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否存在我正在忽视的现有limit
或range
功能.
如果第三方图书馆很常见,欢迎加入(例如:Commons或Guava)
在Ruby中我可以这样写:
case n
when 0...5 then "less than five"
when 5...10 then "less than ten"
else "a lot"
end
Run Code Online (Sandbox Code Playgroud)
我如何在Scala中执行此操作?
编辑:我最好比使用它更优雅if
.
我有几个数字范围.这些范围不重叠 - 因为它们不重叠,逻辑结果是任何时候任何数字都不能成为多个范围的一部分.每个范围都是连续的(单个范围内没有孔,所以8到16的范围实际上包含8到16之间的所有数字),但两个范围之间可能存在空洞(例如范围从64开始到128,下一个范围从256开始并转到384),因此某些数字可能根本不属于任何范围(在此示例中,数字129到255不属于任何范围).
我得到一个号码,需要知道该号码属于哪个范围......如果它属于任何范围.否则我需要知道它不属于任何范围.当然速度很重要; 我不能简单地检查所有范围是O(n),因为可能有数千个范围.
一个简单的解决方案是将所有数字保存在已排序的数组中并对其运行二进制搜索.这至少会给我O(log n).当然二进制搜索必须稍微修改,因为它必须始终检查范围的最小和最大数量.如果要查找的数字介于两者之间,我们找到了正确的范围,否则我们必须搜索当前范围之下或之上的范围.如果最后只剩下一个范围并且数字不在该范围内,则该数字根本不在范围内,我们可以返回"未找到"结果.
范围也可以在某种树形结构中链接在一起.这基本上就像是带有二分搜索的排序列表.优点是修改树比修改数组(添加/删除范围)更快,但不像我们浪费一些额外的时间来保持树平衡,树可能会在一段时间内变得非常不平衡,这将导致比排序数组上的二进制搜索慢得多.
人们可以争论哪种解决方案更好或更差,因为实际上搜索和修改操作的数量几乎是平衡的(每秒执行的搜索和添加/删除操作数量相同).
对于这类问题,是否有比排序列表或树更好的数据结构?也许在最好的情况下可能比O(log n)更好,在最坏的情况下可能比O(log n)更好?
此处可能有用的一些其他信息如下:所有范围始终以2的幂的倍数开始和结束.它们总是以相同的2的幂开始和结束(例如,它们以4的倍数或8的倍数或16的倍数开始/结束,依此类推).在运行时,2的功率不能改变.在添加第一个范围之前,必须设置2的幂,并且所有已添加的范围必须以此值的倍数开始/结束,直到应用程序终止.我认为这可以用于优化,好像它们都以例如8的倍数开始,我可以忽略所有比较操作的前3位,其他位将告诉我范围(如果有的话).
我读到了关于树和树的范围.这些是问题的最佳解决方案吗?有没有更好的解决方案?问题听起来类似于malloc实现必须做的事情(例如,每个freed内存块属于一系列可用内存,malloc实现必须找到哪一个),那么通常如何解决这个问题呢?
这条线
p *1..10
Run Code Online (Sandbox Code Playgroud)
完全一样的事情
(1..10).each { |x| puts x }
Run Code Online (Sandbox Code Playgroud)
它给你以下输出:
$ ruby -e "p *1..10"
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
例如,与textmate合作时,这是一个很好的捷径,但是星号是做什么的?这是如何运作的?在网上找不到任何东西......
在给定边界之间制作包含均匀间隔数字(不仅仅是整数)的任意长度列表的pythonic方法是什么?例如:
my_func(0,5,10) # ( lower_bound , upper_bound , length )
# [ 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5 ]
Run Code Online (Sandbox Code Playgroud)
请注意,该Range()
函数仅处理整数.还有这个:
def my_func(low,up,leng):
list = []
step = (up - low) / float(leng)
for i in range(leng):
list.append(low)
low = low + step
return list
Run Code Online (Sandbox Code Playgroud)
看起来太复杂了.有任何想法吗?