Python 将列表清空为新列表
我试图做一个函数,当一个列表为空时,第二个列表将以相反的顺序清空到空列表中。现在,我试着做:Python 将列表清空为新列表,python,list,Python,List,我试图做一个函数,当一个列表为空时,第二个列表将以相反的顺序清空到空列表中。现在,我试着做: a = [1,2,3,4] b = [] def a_to_b(a, b): if not a: print('a:',a) print('b:',b) for c in b: a.append(c) b.remove(c) print('a:',a)
a = [1,2,3,4]
b = []
def a_to_b(a, b):
if not a:
print('a:',a)
print('b:',b)
for c in b:
a.append(c)
b.remove(c)
print('a:',a)
print('b:',b)
return True
else:
top = a.pop()
b.append(top)
print('a:',a)
print('b:',b)
return True
我希望它在每次跑步之后:
1) a = [1,2,3]
b = [4]
2) a = [1,2]
b = [4,3]
3) a = [1]
b = [4,3,2]
4) a = []
b = [4,3,2,1]
5) a = [1,2,3,4]
b = []
但是在第五次跑步之后,它给了我
a = [4,2]
b = [3,1]
我不明白为什么它只适用于b中的每一个其他数字。您的问题是由于删除了for循环中跳过的元素造成的 指针将作为索引0、1、2、3运行,但您已经删除了第0个元素,导致指针直接运行到2,而2现在是剩余列表中的索引1 为了避免这种情况,您可以将代码更改为:
for c in b:
a.append(c)
for c in a:
b.remove(c)
您的问题是由于删除了在for循环中跳过的元素造成的 指针将作为索引0、1、2、3运行,但您已经删除了第0个元素,导致指针直接运行到2,而2现在是剩余列表中的索引1 为了避免这种情况,您可以将代码更改为:
for c in b:
a.append(c)
for c in a:
b.remove(c)
以下是您得到奇怪结果的原因:
for c in b:
a.append(c)
b.remove(c)
在迭代列表b时,您正在更改它。因此,事情不会像你期望的那样发生。你为什么不这样做呢
b.reverse()
a = b
b = []
在你以前拥有的地方。那就是
a = [1,2,3,4]
b = []
def a_to_b(a, b):
if not a:
print('a:',a)
print('b:',b)
b.reverse()
a = b
b = []
print('a:',a)
print('b:',b)
return True
else:
top = a.pop()
b.append(top)
print('a:',a)
print('b:',b)
return True
以下是您得到奇怪结果的原因:
for c in b:
a.append(c)
b.remove(c)
在迭代列表b时,您正在更改它。因此,事情不会像你期望的那样发生。你为什么不这样做呢
b.reverse()
a = b
b = []
在你以前拥有的地方。那就是
a = [1,2,3,4]
b = []
def a_to_b(a, b):
if not a:
print('a:',a)
print('b:',b)
b.reverse()
a = b
b = []
print('a:',a)
print('b:',b)
return True
else:
top = a.pop()
b.append(top)
print('a:',a)
print('b:',b)
return True
问题在于:
for c in b:
a.append(c)
b.remove(c)
在不混淆循环的情况下,无法从交互对象的中间删除对象
发生的情况如下:
有b=[4,3,2,1]和a=[]。启动for循环,c指向b的第一个索引,即4。从列表中删除c,然后将其放入a中
现在你有了b=[3,2,1]和a=[4],就像你期望的那样
当你尝试开始下一个循环时,你的索引是递增的,现在c指向第二个元素,但问题是你弄乱了iterable的结构。因此,循环会像预期的那样移除c,但是c=2,而不是像预期的那样移除3
现在有了a=[4,2]和b=[1,3],当循环检查索引3时,它发现b is只有2个元素,因此它退出。问题在于:
for c in b:
a.append(c)
b.remove(c)
def f(a, b):
if a:
b.append(a.pop())
else:
while b:
a.append(b.pop())
print 'a: %s' % a
print 'b: %s' % b
>>> a = [1, 2, 3, 4]
>>> b = []
>>> f(a, b)
a: [1, 2, 3]
b: [4]
>>> f(a, b)
a: [1, 2]
b: [4, 3]
>>> f(a, b)
a: [1]
b: [4, 3, 2]
>>> f(a, b)
a: []
b: [4, 3, 2, 1]
>>> f(a, b)
a: [1, 2, 3, 4]
b: []
在不混淆循环的情况下,无法从交互对象的中间删除对象
发生的情况如下:
有b=[4,3,2,1]和a=[]。启动for循环,c指向b的第一个索引,即4。从列表中删除c,然后将其放入a中
现在你有了b=[3,2,1]和a=[4],就像你期望的那样
当你尝试开始下一个循环时,你的索引是递增的,现在c指向第二个元素,但问题是你弄乱了iterable的结构。因此,循环会像预期的那样移除c,但是c=2,而不是像预期的那样移除3
现在你有了a=[4,2]和b=[1,3],当循环检查索引3时,它发现b is只有2个元素,所以它退出。这应该是可行的
def f(a, b):
if a:
b.append(a.pop())
else:
while b:
a.append(b.pop())
print 'a: %s' % a
print 'b: %s' % b
>>> a = [1, 2, 3, 4]
>>> b = []
>>> f(a, b)
a: [1, 2, 3]
b: [4]
>>> f(a, b)
a: [1, 2]
b: [4, 3]
>>> f(a, b)
a: [1]
b: [4, 3, 2]
>>> f(a, b)
a: []
b: [4, 3, 2, 1]
>>> f(a, b)
a: [1, 2, 3, 4]
b: []
这应该行得通
这是家庭作业问题吗?因为在python中有比你现在做的更简单的方法不,这不是,只是我在做的一个个人项目。有什么更简单的方法?这是家庭作业问题吗?因为在python中有比你现在做的更简单的方法不,这不是,只是我在做的一个个人项目。有什么更简单的方法吗?如果你在这里。。。虽然b-不需要检查它们的长度,但是如果a在这里,你可以使用它。。。而b-不需要检查它们的长度你可以做b.appenda.pop你可以做b.appenda.pop