Python 替换所有列表元素而不是 for 循环中的索引列表元素
Python replacing all list elements instead of the indexed list element in for loop
我想替换列表中第k个元素的第k个元素
例如,
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
到
[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]
但 python 似乎不想这样做,而是替换每个元素的每个值。
我运行这个:
# Triangle Vertices
V = [[0, 1], [-1, 0], [1, 0]]
# Triangles (indices of V in clockwise direction)
T = [[1, 0, 2]]
# Creating sub-triangles
bary_point = [0, 0.5]
v_list = []
for t in T:
print(t)
for k in range(3):
v_list.append(V)
v_list[k][k] = bary_point # <-- This line
print('v_list: ')
print(v_list)
它产生这个:
v_list:
[[[0, 0.5], [0, 0.5], [0, 0.5]],
[[0, 0.5], [0, 0.5], [0, 0.5]],
[[0, 0.5], [0, 0.5], [0, 0.5]]]
但是我想要这个:
v_list:
[[[0, 0.5], [-1, 0], [1, 0]],
[[0, 1], [0, 0.5], [1, 0]],
[[0, 1], [-1, 0], [0, 0.5]]]
我做错了什么吗?我在 Python 3.10.0
谢谢。
编辑解决方案:
变化
v_list.append(V)
到
v_list.append(V.copy())
谢谢!
您正在将相同的引用附加到列表 V
,而当您更改 v_list[k][k]
时,您正在更改 V
,一种解决方案是附加列表的副本,通过使用 V.copy()
作为 append
.
的参数
我想替换列表中第k个元素的第k个元素
例如,
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
到
[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]]
但 python 似乎不想这样做,而是替换每个元素的每个值。
我运行这个:
# Triangle Vertices
V = [[0, 1], [-1, 0], [1, 0]]
# Triangles (indices of V in clockwise direction)
T = [[1, 0, 2]]
# Creating sub-triangles
bary_point = [0, 0.5]
v_list = []
for t in T:
print(t)
for k in range(3):
v_list.append(V)
v_list[k][k] = bary_point # <-- This line
print('v_list: ')
print(v_list)
它产生这个:
v_list:
[[[0, 0.5], [0, 0.5], [0, 0.5]],
[[0, 0.5], [0, 0.5], [0, 0.5]],
[[0, 0.5], [0, 0.5], [0, 0.5]]]
但是我想要这个:
v_list:
[[[0, 0.5], [-1, 0], [1, 0]],
[[0, 1], [0, 0.5], [1, 0]],
[[0, 1], [-1, 0], [0, 0.5]]]
我做错了什么吗?我在 Python 3.10.0
谢谢。
编辑解决方案: 变化
v_list.append(V)
到
v_list.append(V.copy())
谢谢!
您正在将相同的引用附加到列表 V
,而当您更改 v_list[k][k]
时,您正在更改 V
,一种解决方案是附加列表的副本,通过使用 V.copy()
作为 append
.