[英]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.