range()并xrange()为10位数字工作.但13位数字怎么样?我在论坛里找不到任何东西.
我想在python中迭代一个闭合范围的整数[a,b],即.从a到b迭代,包括a和b.
我知道以下方法:
for i in range(a, b+1):
do_something(i)
Run Code Online (Sandbox Code Playgroud)
为了反向迭代(即按b,b-1,b-2,...,a的顺序),我执行以下操作:
for i in range(b, a-1, -1):
do_something(i)
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个加法(在示例中为b + 1)和减法(在示例中为a-1)以达到范围的闭合端.我发现它的可读性低于c/c ++/Java对应物(<=在循环中的使用).
你有没有python中的东西可以用于在封闭范围之间迭代而无需人工干预边界?
我编写了一个脚本,我想为Python 2和Python 3启用它.
导入后division和print_function从__future__,我唯一担心的是,我的range回报整个阵列在Python 2,浪费时间和内存.
我在脚本开头添加了以下3行作为解决方法:
if sys.version_info[0] == 3:
def xrange(i):
return range(i)
Run Code Online (Sandbox Code Playgroud)
然后,我只xrange在我的代码中使用.
是否有更优雅的方式来做而不是我的解决方法?
我试图继承xrange(使用in以及迭代来实现成员资格测试)。但我收到以下错误消息:
TypeError: Error when calling the metaclass bases
type 'xrange' is not an acceptable base type
Run Code Online (Sandbox Code Playgroud)
有什么特别之处xrange?
If s是slicePython中的一个对象,使用s = slice(start, stop, step)或者(在适当的上下文中)start:stop:step构造,用于构造的值s可以从slice对象本身获得s.start,s.stop和s.step.
类似的start,stop并且step成员可在range在Python 3.4 [对象Issue9896.例如,range(1, 4, 2).start == 1.
然而,Python 2.7版xrange的对象不具备start,stop和step成员.有没有其他方法可以获取用于构造xrange对象本身的值?
当我遇到在对象中查找的答案之一range是 CONSTANT TIME 操作时,我在 StackOverflow 上滚动浏览了许多与列表与范围相关的问题!这在 O(1) 中如何完成是没有意义的,您将不得不遍历范围以查看是否存在数字。范围对象是否像一些哈希图/字典一样工作?
def usingRange(x):
return x in range(0, 100000000)
print(usingRange(9999999))
def noRange(x):
return x in list(range(0, 100000000))
print(noRange(9999999))
%timeit usingRange(9999999)
%timeit noRange(9999999)
Run Code Online (Sandbox Code Playgroud)
我得到的输出为:
True
True
443 ns ± 8.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
6.89 s ± 380 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么它的时间恒定的原因是因为
有人告诉我不要太专注于学习 Python 编程面试中的“技巧”!因为你所做的每一件事,你都必须解释时间复杂度,所以你要么记住i in list1O(N),要么使用 for 循环遍历列表:
for …Run Code Online (Sandbox Code Playgroud)我正在尝试使用ctypes从内部python结构中提取数据.也就是说,我正在尝试读取xrange中的4个字段:
typedef struct {
PyObject_HEAD
long start;
long step;
long len;
} rangeobject;
Run Code Online (Sandbox Code Playgroud)
有没有标准的方法来获取python本身的这些领域?
什么是更快,使用枚举或使用xrange的for循环?
编辑:我已经测试过,我只看到最小的差异.
新的编程,即时学习,这对你来说可能是一个非常简单的问题.
import random
def run_stair_yes():
print "\nRunning in stairs is very dangerous!"
print "Statistique shows that you have 70% chance of falling"
print "\nroll the dice!"
for i in xrange(1):
print random.randint(1, 100)
if i <= 70 :
print "\nWell, gravity is a bitch. You fell and die."
elif i >= 71 :
athlethic()
else:
print "im boned!"
exit(0)
Run Code Online (Sandbox Code Playgroud)
我的问题是,无论生成什么数字,它总是给我相同的"重力是一个婊子.你堕落而死".
我哪里出错了?
我有一个很大的整数数组,我需要在数组中将每10个整数及其对应的索引中的最大值打印为一对.
ex. (max_value, index of max_value in array)
Run Code Online (Sandbox Code Playgroud)
我可以在前10个整数中成功找到最大值和相应的索引,但是我在遍历整个数组时遇到问题.
我尝试过使用:
a = some array of integers
split = [a[i:i+10] for i in xrange(0, len(a), 10)]
for i in split:
j = max(i)
k = i.index(max(i))
print (j,k)
Run Code Online (Sandbox Code Playgroud)
用这种方法的问题是,它分裂我的数组到10所以max_values是正确的块,但指标是不准确的(所有的指标都是0-10之间).我需要找到这样那并不是"的一种方式t将我的数组拆分成块,以便保留原始索引.我确信有一种更简单的循环方式来查找最大值,但我似乎无法弄明白.
python ×10
xrange ×10
range ×3
loops ×2
python-3.x ×2
arrays ×1
cpython ×1
ctypes ×1
if-statement ×1
inheritance ×1
iterator ×1
list ×1
lookup ×1
numbers ×1
python-2.7 ×1
python-2.x ×1
typeerror ×1