为什么python不打印我写进去的所有内容?

  • 本文关键字:python 打印 python printing
  • 更新时间 :
  • 英文 :


我正在做一些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中,数据类型分为可变类型:

  • 可变对象:对象所指向的内存值可以改变
  • object:对象所指向的内存中的值是不能改变的,所以当变量所指向的值发生变化时,相当于复制原来的值并将其存储在一个新的地址中,并且变量指向这个新地址。
a = [1,2,3,4]
a_ref = a
print(a) # [1,2,3,4]
a_ref[0] = 5
print(a) # [5,2,3,4]
从上面的代码 可以看出
  1. a, a_ref是完全相同的
  2. a和a_ref具有相同的内存位置
  3. 修改为a_ref, a也会被修改
  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)
BUT来改变a
由于a2是对a的引用并且指向相同的内存位置,因此当a2被修改时,它也将被修改为a


当你调用reverse_list(list1)时,l1是对list1的引用,当你从l1弹出元素时,它也会弹出list1中的元素

所以在调用reverse_list(list1)之后,list1是空的,这就是为什么reverse_print(list1)不打印任何东西

Sollution

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不会指向相同的内存位置所以当modiica l1_copy

时,l1和list1不会被修改PS:英语是我的第二语言,所以可能有一些语法错误,请原谅

在第二次打印时,list1已经从使用reverse_list中的pop()方法中清空。

来反转列表,也许你应该使用reverse()方法,就像下面的例子:

List1 = [1,2,3]
List1.reverse()
print(List1) # [3,2,1]

最新更新