![](/img/trans.png)
[英]Why doesn't `if` work in Python Turtle , it seems to me I wrote everything correctly
[英]Why doesn't python print everything I wrote into it?
我在 python python 做一些练习,我遇到了一个问题。 我已经打印了一个反转的列表,我也想在不同的行中打印反转的元素,但由于某种原因它只打印第一个,如果我把第一个打印到评论中,它打印出循环就好了。 为什么?
def main():
pass
if __name__ == '__main__':
main()
list1 = [10, 20, 30, 40, 50]
def reverse_list(l1):
l2 = []
for i in range(len(l1)):
l2.append(l1.pop())
return l2
print(reverse_list(list1))
pass
def reverse_print(l):
listr = reversed(l)
for j in listr:
print(j)
reverse_print(list1)
print("Complete...")
python中,数据类型分为可变和不可变类型:
a = [1,2,3,4]
a_ref = a
print(a) # [1,2,3,4]
a_ref[0] = 5
print(a) # [5,2,3,4]
从上面的代码可以看出
例如:
a = [1,2,3,4]
def somefunc(a2):
a2.append(5)
print(a) # [1,2,3,4]
somefunc(a)
print(a) # [1,2,3,4,5]
通常,它不会通过调用somefunc(a)
来改变 a
但
由于a2是对a的引用,指向同一个memory位置,所以修改a2时,也会修改为a
在你的代码中:
当你调用reverse_list(list1)
时,l1 是对 list1 的引用,当你从 l1 中弹出元素时,它也会弹出 list1 中的元素
所以在调用reverse_list(list1)
之后,list1 是空的,这就是为什么reverse_print(list1)
不打印任何东西
解决方案
def reverse_list(l1):
l1_copy = l1[:] # copy the whole list
l2 = []
for i in range(len(l1_copy)):
l2.append(l1_copy.pop())
return l2
当您调用l1_copy = l1[:]
时,l1_copy 不会指向相同的 memory 位置,因此在修改 l1_copy 时 l1 和 list1 不会被修改
PS:英语是我的第二语言,所以可能有一些语法错误,请原谅
在第二次打印时, list1
已通过使用reverse_list
中的pop()
方法清空。
要反转列表,也许您应该使用reverse()
方法,如下例所示:
List1 = [1,2,3]
List1.reverse()
print(List1) # [3,2,1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.