p=[1,2,3,4,5,6]
while True:
for i in p:
if i==4:
p=[]
f=[9,8,7]
p.extend(f)
break
print i,',',
p.remove(i)
if not p:
break
#expect output is:1,2,3,9,8,7,
高手帮我看看,为什么我得不到我想要的结果呢,有什么方法可以得到我想要的结果吗
12 个解决方案
#1
一、禁止在for遍历的时候修改被遍历的对象。
二、尽量少写for循环。
三、没看明白你想要做什么实际的事情。你稍微解释下吧。要看懂一段错误的代码本来想做什么事情是比较难的。
二、尽量少写for循环。
三、没看明白你想要做什么实际的事情。你稍微解释下吧。要看懂一段错误的代码本来想做什么事情是比较难的。
#2
for i in p:应该要极力避免去改变p。while里随便起个整数当list下标来访问元素,然后循环递增这个整数...
#3
for i in p:
---> i是列表p的元素
p.remove(i)
--->这个i是列表p的索引
另外:
p=[1,2,3,4,5,6]
f=[9,8,7]
p[p.index(4):]=f
就可以实现你要的
---> i是列表p的元素
p.remove(i)
--->这个i是列表p的索引
另外:
p=[1,2,3,4,5,6]
f=[9,8,7]
p[p.index(4):]=f
就可以实现你要的
#4
我的意思是将列表中4之前的元素打印出来,4之后的不打印,但每次遇见4的时候会有一个新的list要打印,这个list中也有可能有4,处理和前面list一样
当然我实际作的东西不是这个,这只是我简化之后写的测试代码,但意思是一样的,就是处理一个list,碰到特殊情况生成一个新list,转而去处理这个新生成的list
#5
#!/usr/bin/python
p = [1,2,3,4,5,6]
for i in p:
if i == 4:
p[i:]=[7,8,9]
else:
print i
#6
p=[1,2,3,4,5,6]
while True:
for i in p:
if i==4:
f=[9,8,7]
p=p[:p.index(i)]
p.extend(f)
break
#for j in range(len(p)):
# print p[j],","
print ",".join([str(d) for d in p])
break
这是你要的吧。
#7
赞
#8
既然旧的不要了应该if i==4: break 先跳出for范围再说,还在while里后头可以再入for循环
#9
这个确实可以,比我后来自己写的一个好
def pp(p,b):
for num,i in enumerate(p):
if i == 4:
p=[]
x=[9,8,7,5,6,2,7,5,6,2,3]
p.extend(x)
break
print num,i
b.append(i)
# print 'len=',len(p)
if num == len(p)-1:
p=[]
return p
if __name__ == '__main__':
f =[1,2,3,2,4]
c=[]
while f:
f =pp(f,c)
print c
#10
我前面那个程序有错大概是因为在for语句中的i的迭代,在python内部实现里还是用了它在p中的index
#11
向被遍历列表中增加和删除元素很容易导致循环异常, 如果必须修改被遍历列表, 前提必须保证不能影响循环正常进行,并且,符合欲实现业务的逻辑的要求,即,属于合理行为。
#12
不对,这个还是有点不太对,这个没有考虑新的list f中也含有4的情况
将上面我那个再修改一下:这里的xx是输入,是一个序列数组,前一个序列含有4后面的序列才会被输入,最后一个序列一定不能有4
#!/usr/bin/env python
xx=[(5,2,4,5),(3,4,6,2),(2,3,6)]
def pp(p,b,N):
for num,i in enumerate(p):
if i == 4:
p=[]
x=xx[N]
p.extend(x)
break
print num,i
b.append(i)
# print 'len=',len(p)
if num == len(p)-1:
p=[]
return p
if __name__ == '__main__':
f =[1,2,3,2,4,5,6,7,8]
c=[]
n=0
while f:
f =pp(f,c,n)
n=n+1
print c
#1
一、禁止在for遍历的时候修改被遍历的对象。
二、尽量少写for循环。
三、没看明白你想要做什么实际的事情。你稍微解释下吧。要看懂一段错误的代码本来想做什么事情是比较难的。
二、尽量少写for循环。
三、没看明白你想要做什么实际的事情。你稍微解释下吧。要看懂一段错误的代码本来想做什么事情是比较难的。
#2
for i in p:应该要极力避免去改变p。while里随便起个整数当list下标来访问元素,然后循环递增这个整数...
#3
for i in p:
---> i是列表p的元素
p.remove(i)
--->这个i是列表p的索引
另外:
p=[1,2,3,4,5,6]
f=[9,8,7]
p[p.index(4):]=f
就可以实现你要的
---> i是列表p的元素
p.remove(i)
--->这个i是列表p的索引
另外:
p=[1,2,3,4,5,6]
f=[9,8,7]
p[p.index(4):]=f
就可以实现你要的
#4
我的意思是将列表中4之前的元素打印出来,4之后的不打印,但每次遇见4的时候会有一个新的list要打印,这个list中也有可能有4,处理和前面list一样
当然我实际作的东西不是这个,这只是我简化之后写的测试代码,但意思是一样的,就是处理一个list,碰到特殊情况生成一个新list,转而去处理这个新生成的list
#5
#!/usr/bin/python
p = [1,2,3,4,5,6]
for i in p:
if i == 4:
p[i:]=[7,8,9]
else:
print i
#6
p=[1,2,3,4,5,6]
while True:
for i in p:
if i==4:
f=[9,8,7]
p=p[:p.index(i)]
p.extend(f)
break
#for j in range(len(p)):
# print p[j],","
print ",".join([str(d) for d in p])
break
这是你要的吧。
#7
赞
#8
既然旧的不要了应该if i==4: break 先跳出for范围再说,还在while里后头可以再入for循环
#9
这个确实可以,比我后来自己写的一个好
def pp(p,b):
for num,i in enumerate(p):
if i == 4:
p=[]
x=[9,8,7,5,6,2,7,5,6,2,3]
p.extend(x)
break
print num,i
b.append(i)
# print 'len=',len(p)
if num == len(p)-1:
p=[]
return p
if __name__ == '__main__':
f =[1,2,3,2,4]
c=[]
while f:
f =pp(f,c)
print c
#10
我前面那个程序有错大概是因为在for语句中的i的迭代,在python内部实现里还是用了它在p中的index
#11
向被遍历列表中增加和删除元素很容易导致循环异常, 如果必须修改被遍历列表, 前提必须保证不能影响循环正常进行,并且,符合欲实现业务的逻辑的要求,即,属于合理行为。
#12
不对,这个还是有点不太对,这个没有考虑新的list f中也含有4的情况
将上面我那个再修改一下:这里的xx是输入,是一个序列数组,前一个序列含有4后面的序列才会被输入,最后一个序列一定不能有4
#!/usr/bin/env python
xx=[(5,2,4,5),(3,4,6,2),(2,3,6)]
def pp(p,b,N):
for num,i in enumerate(p):
if i == 4:
p=[]
x=xx[N]
p.extend(x)
break
print num,i
b.append(i)
# print 'len=',len(p)
if num == len(p)-1:
p=[]
return p
if __name__ == '__main__':
f =[1,2,3,2,4,5,6,7,8]
c=[]
n=0
while f:
f =pp(f,c,n)
n=n+1
print c