#python-3.x #list #matrix
#python-3.x #Список #матрица
Вопрос:
- Я попытался решить эту проблему , используя 2 цикла for и оператор if . Но я не смог получить желаемый результат.
ВВОД-
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
thislist=[1]*10
thislist=[thislist]*10
print(thislist)
for i in range(10):
for j in range(10):
print(thislist[i][j], end = " ")
print()
print()
for i in range(10):
for j in range(10):
if i>j:
thislist[i][j]=0
for i in range(10):
for j in range(10):
print(thislist[i][j], end = " ")
print()
Это был результат, который я получил:
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
- но когда я составил список, используя приведенный ниже метод, я получил желаемый результат.
thislist=[[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]]
print(thislist)
for i in range(10):
for j in range(10):
if i>j:
thislist[i][j]=0
for i in range(10):
for j in range(10):
print(thislist[i][j], end = " ")
print()
примечание — Это желаемый РЕЗУЛЬТАТ-
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
Кто-нибудь может объяснить, в чем разница между вышеуказанными 2 кодами?
Комментарии:
1. каков ввод? каков желаемый результат? пожалуйста, сделайте ваш вопрос более понятным.
2. хорошо — каков желаемый результат? что означает «нижняя половина n * n»?
Ответ №1:
Как вы указали, проблема возникает из-за того, как вы создали свой список list. В вашем первом примере вы делаете что-то вроде этого:
list1 = [1]*10
list_of_list1=[list1]*10
list_of_list1
на самом деле это список мелких копий оригинала list1
. Затем, если вы измените значение в list_of_list1
, изменение произойдет во всех строках list_of_list1
.
Противоположностью мелкой копии является глубокая копия. Возможно, вы захотите поискать дополнительную информацию в Интернете по этой теме
В то же время, вы можете просто попробовать это.
thislist = []
for row in range(10):
list1 = [1]*10
thislist.append(list1)
Но я обычно использую numpy, когда он доступен.