在嵌套的 python 列表中查找一个元素然后替换它
Finding an element in nested python list and then replacing it
我有一个嵌套列表,我正在尝试用其他内容替换列表中的某个元素。
NL = [[1,2,3],
[4,5,6],
[7,8,9]];
现在,我需要更新列表,假设用户想要将 NL[1][1](即 5)处的元素更改为 'X'。
NL 将更新为
NL = [[1,2,3],
[4,'X',6],
[7,8,9]];`
我在尝试找到元素的位置然后更改它时遇到问题。非常感谢任何帮助。
谢谢
使用 2 个索引,1 个用于您想要的嵌套列表,一个用于您想要的嵌套列表的元素。
所以在这种情况下,您需要第二个列表的第二个元素:
NL[1][1]='X'
输出:
[[1, 2, 3], [4, 'X', 6], [7, 8, 9]]
假设您需要找到元素 5
并想将其替换为 10
。
我们遍历外部列表,然后遍历每个内部列表的元素。一旦找到要查找的元素,就可以用索引替换它。一旦找到匹配的元素,我们就使用枚举来获取索引。
以下代码替换所有匹配元素(所有出现的 5
)。
NL = [[1,2,3], [4,5,6], [7,8,9]]
print(NL) # prints: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for i, sublist in enumerate(NL):
for y, element in enumerate(sublist):
if element == 5:
NL[i][y] = 10
print(NL) # prints: [[1, 2, 3], [4, 10, 6], [7, 8, 9]]
使用numpy
:
NL = np.array(NL)
mask = np.where(NL == 5)
NL[mask] = 10
array([[ 1, 2, 3],
[ 4, 10, 6],
[ 7, 8, 9]])
解决方案2:
def get_index(num, List):
for row, i in enumerate(List):
if num in i:
return row, i.index(num)
return -1
idx = get_index(5,NL)
if idx>0:
NL[idx[0]][idx[1]] = 7
[[1, 2, 3], [4, 7, 6], [7, 8, 9]]
这将仅替换第一次出现的 item_to_replace
。如果您希望它替换所有子列表,请从 try
块中删除 break
语句。
item_to_replace = 5
for lst in NL:
try:
index = lst.index(item_to_replace)
<b>lst[index] = # your replacement for item_to_replace</b>
break
except ValueError:
continue
</pre>
您应该通过索引访问元素。你有二维列表(数组)所以你应该使用 2 个索引:NL[1][1] = "X"
.
完整代码:
NL = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print("Original: {}".format(NL))
NL[1][1] = "X"
print("New: {}".format(NL))
输出:
>>> python3 test.py
Original: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
New: [[1, 2, 3], [4, 'X', 6], [7, 8, 9]]
只需使用 NL[1][1] = 'X'
然后打印(NL)
I am having trouble trying to find the position of the element and then changing it.
这里的大部分答案似乎都遗漏了那部分,并假设您拥有职位。
您可以使用嵌套列表理解:
NL = [[1,2,3],
[4,5,6],
[7,8,9]]
NL = [['X' if i==5 else i for i in j] for j in NL]
print(NL)
输出:
[[1, 2, 3],
[4,'X',6],
[7, 8, 9]]
我有一个嵌套列表,我正在尝试用其他内容替换列表中的某个元素。
NL = [[1,2,3],
[4,5,6],
[7,8,9]];
现在,我需要更新列表,假设用户想要将 NL[1][1](即 5)处的元素更改为 'X'。
NL 将更新为
NL = [[1,2,3],
[4,'X',6],
[7,8,9]];`
我在尝试找到元素的位置然后更改它时遇到问题。非常感谢任何帮助。
谢谢
使用 2 个索引,1 个用于您想要的嵌套列表,一个用于您想要的嵌套列表的元素。
所以在这种情况下,您需要第二个列表的第二个元素:
NL[1][1]='X'
输出:
[[1, 2, 3], [4, 'X', 6], [7, 8, 9]]
假设您需要找到元素 5
并想将其替换为 10
。
我们遍历外部列表,然后遍历每个内部列表的元素。一旦找到要查找的元素,就可以用索引替换它。一旦找到匹配的元素,我们就使用枚举来获取索引。
以下代码替换所有匹配元素(所有出现的 5
)。
NL = [[1,2,3], [4,5,6], [7,8,9]]
print(NL) # prints: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for i, sublist in enumerate(NL):
for y, element in enumerate(sublist):
if element == 5:
NL[i][y] = 10
print(NL) # prints: [[1, 2, 3], [4, 10, 6], [7, 8, 9]]
使用numpy
:
NL = np.array(NL)
mask = np.where(NL == 5)
NL[mask] = 10
array([[ 1, 2, 3],
[ 4, 10, 6],
[ 7, 8, 9]])
解决方案2:
def get_index(num, List):
for row, i in enumerate(List):
if num in i:
return row, i.index(num)
return -1
idx = get_index(5,NL)
if idx>0:
NL[idx[0]][idx[1]] = 7
[[1, 2, 3], [4, 7, 6], [7, 8, 9]]
这将仅替换第一次出现的 item_to_replace
。如果您希望它替换所有子列表,请从 try
块中删除 break
语句。
item_to_replace = 5
for lst in NL:
try:
index = lst.index(item_to_replace)
<b>lst[index] = # your replacement for item_to_replace</b>
break
except ValueError:
continue
</pre>
您应该通过索引访问元素。你有二维列表(数组)所以你应该使用 2 个索引:NL[1][1] = "X"
.
完整代码:
NL = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print("Original: {}".format(NL))
NL[1][1] = "X"
print("New: {}".format(NL))
输出:
>>> python3 test.py
Original: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
New: [[1, 2, 3], [4, 'X', 6], [7, 8, 9]]
只需使用 NL[1][1] = 'X'
然后打印(NL)
I am having trouble trying to find the position of the element and then changing it.
这里的大部分答案似乎都遗漏了那部分,并假设您拥有职位。
您可以使用嵌套列表理解:
NL = [[1,2,3],
[4,5,6],
[7,8,9]]
NL = [['X' if i==5 else i for i in j] for j in NL]
print(NL)
输出:
[[1, 2, 3],
[4,'X',6],
[7, 8, 9]]