pythonfor循环怎么改_python 中的for循环如何修改循环变量?

1月28日学习 Python选择与循环 选择结构 多分枝选择结构 if 表达式 1: 语句块 1elif 表达式 2: 语句块 2elif 表达式 3: 语句块 3...else : 语句块 n 循环结构 带else的循环结构 while循环和for循环都可以带else字句,如果循环因为条件

如题.想用python来做个最长连续递增子序列的函数,但发现在用for i in range(0,len(seq))的时候,在循环体不能修改i的值,请问有什么方法可以修改?,

修改for语句,改成用循环语句。

i = 0

length = len(seq)

while i < length:

#just do it

i += 1,

最长连续递增子序列为嘛要修改i呢

for i in range(len(s1)):

for j in range(len(s2)):

if s1[i] == s2[j]:

f[i][j] = f[i-1][j-1] + 1

else:

f[i][j] = max(f[i-1][j],f[i][j-1]);

代码随手写的,应该没错,

python for 循环不能修改循环变量的原因是,range()象是一个迭代器,它只会输出信息,而不能修改迭代器的内容。python iterator的C结构是一个指针和一个对象列表。修改循环对象的值是C的思维方式,最好不要用在写python代码上。Python标准库13 循环器 (itertools)   在循环对象和函数对象中,我们了解了循环器(iterator)的功能。循环器是对象的容器,包含有多个对象。通过调用循环器的next()方法 (__next__()方法,在Python 3.x中),循环器将依次返回一个对象。直到所有的对象遍历穷尽,

严重不建议修改迭代变量,很多时候用它来做随机访问是不可能的。有很多其他方法可以做这个事情,用python的for-comprehension和一些reduce方法可以高效、稳定的解决。,

你应该用列表解析等方法提前做好需要的修改,列表解析性能非常好,而for只用来做别的操作。,

你可以修改i的值,但每次循环之后for语句又会重新对i赋值,所以你问的问题不在于能否修改i,而是修改迭代器的行为,答案是不能。

你可以用while,或者,用个生成器:

def incSeq(seq):

start = 0

for i in xrange(1, len(seq)):

if seq[i] < seq[i-1]:

yield start, i - start

start = i

maxIncSeq = reduce(lambda x,y: x if x[1]>y[1] else y, incSeq(seq))

得到最长递增子串长度及起始位置,时间复杂度O(n).,

为什么要修改循环变量的取值,这样做很可能会导致问题。建议用其他方法来实现,比如楼上几位提到的while循环。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值