Python 3.x 在不使用python中的任何函数的情况下,将n*n列表的下半部分设为零 我试图通过使用2个for循环和一个if语句来解决这个问题。但我无法获得所需的输出

Python 3.x 在不使用python中的任何函数的情况下,将n*n列表的下半部分设为零 我试图通过使用2个for循环和一个if语句来解决这个问题。但我无法获得所需的输出,python-3.x,list,matrix,Python 3.x,List,Matrix,输入- 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 这就是我得到的结果: 0 0 0 0 0 0 0 0 0 1 0 0

输入-

1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1
这就是我得到的结果:

0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 0 1 
  • 但是当我使用下面的方法列出一个列表时,我得到了期望的输出
  • 注:这是所需的输出-

    1 1 1 1 1 1 1 1 1 1 
    0 1 1 1 1 1 1 1 1 1 
    0 0 1 1 1 1 1 1 1 1 
    0 0 0 1 1 1 1 1 1 1 
    0 0 0 0 1 1 1 1 1 1 
    0 0 0 0 0 1 1 1 1 1 
    0 0 0 0 0 0 1 1 1 1 
    0 0 0 0 0 0 0 1 1 1 
    0 0 0 0 0 0 0 0 1 1 
    0 0 0 0 0 0 0 0 0 1 
    

    有人能解释一下以上两种代码之间的区别吗?

    正如您所指出的,问题来自您创建列表的方式。在第一个示例中,您可以执行以下操作:

    list1 = [1]*10
    list_of_list1=[list1]*10
    
    列表1的列表实际上是原始列表1的副本的列表。然后,如果修改列表1的
    list\u中的值,则修改将发生在列表1的
    list\u的所有行中

    拷贝的对立面是拷贝。您可能希望在Internet上搜索有关此主题的更多信息

    同时,你可以试试这个

    thislist = []
    for row in range(10):
        list1 = [1]*10
        thislist.append(list1)
    

    但我通常会在numpy可用时使用它。

    输入是什么?期望的输出是什么?请把你的问题弄清楚。好的,你想要的输出是什么?“n*n的下半部分”是什么意思?
    list1 = [1]*10
    list_of_list1=[list1]*10
    
    thislist = []
    for row in range(10):
        list1 = [1]*10
        thislist.append(list1)