numpy 如何以特定方式替换数组的元素

0wi1tuuw  于 2022-12-18  发布在  其他
关注(0)|答案(3)|浏览(147)

我正在用这个概念解决一个问题:这是一间教室,我必须用一个名字替换一个空座位,但以一种特定的方式:它被替换在最后一排,从右到左。如果教室满了,它会显示一条信息,没有空位。
我不知道如何按照问题所说的顺序替换一个可用的座位。

import numpy as np

classroom1 = np.array([["Martha", "Available"], 
                       ["Max", "Anahi"], 
                       ["Available", "Available"], 
                       ["Alexis", "Rigel"]])

到目前为止,我可以手动更换我选择的座位,但不是以问题陈述的方式。例如:

classroom1[0,1] = "Alex"
print(classroom1)

[["Martha", "Alex"], 
 ["Max", "Anahi"], 
 ["Available", "Available"], 
 ["Alexis", "Rigel"]]

但我还是想不出怎么根据问题来解决,我不知道怎么解决。

yfjy0ee7

yfjy0ee71#

代码:-

import numpy as np

classroom1 = np.array([["Martha", "Available"], 
                       ["Max", "Anahi"], 
                       ["Available", "Available"], 
                       ["Alexis", "Rigel"]])
list_of_names=['Yash','Sam','Itachi','Ace']

seats_available=0
for i in range(len(classroom1)):
    for j in range(len(classroom1[0])):
        if classroom1[i][j]=="Available":
            seats_available+=1
#Enter the students in order right to left and starting from the last
count=0
for i in range(len(classroom1)-1,-1,-1):
    for j in range(len(classroom1[0])-1,-1,-1):
        if classroom1[i][j]=="Available":
            if seats_available and count<len(list_of_names):
                classroom1[i][j]=list_of_names[count]
                count+=1
                seats_available-=1
print(classroom1)  #as you can see Ace is not present cause there is no available seats for them when he appeared.

输出:-

[['Martha' 'Itachi']
 ['Max' 'Anahi']
 ['Sam' 'Yash']
 ['Alexis' 'Rigel']]
dxxyhpgq

dxxyhpgq2#

这是你要找的吗?

classroom1[-1,-2] = "Alex"
print(classroom1)

输出:

[['Martha' 'Available']
 ['Max' 'Anahi']
 ['Available' 'Available']
 ['Alex' 'Rigel']]
hsgswve4

hsgswve43#

我们可以使用反向索引或负索引来解决这个问题。使用正/正索引时,你可以从头到尾遍历一个数组。但是使用反向索引时,你使用“-”号作为索引,它会反向遍历。
考虑以下示例:

x = np.array(['a','b','c','d','e','f','g'])
print(x[2])
print(x[-5])

所以这两条指令都将输出'c'需要记住的一点是,在倒排索引中,我们从-1开始,所以如果要输出'g',必须传递x[-1]

**现在回到原来的问题:**您有一个二维数组,这意味着您必须传递两个负索引来执行所需的修改

classroom[子数组索引][子数组内元素的索引]
考虑另一个例子:

classroom1[0,1] = "Alex"
print(classroom1)
[["Martha", "Alex"], 
 ["Max", "Anahi"], 
 ["Available", "Available"], 
 ["Alexis", "Rigel"]]

假设我们想要更新索引2处数组中索引0处的座位,那么我们必须执行反向索引,如下所示:

classroom[-2][-2] = "Peter"
[["Martha", "Alex"], 
 ["Max", "Anahi"], 
 ["Peter", "Available"], 
 ["Alexis", "Rigel"]]

相关问题