简体   繁体   English

如何在 python 中查找二维数组中的值?

[英]How to find a value in a 2D array in python?

I'm making a board game for school and I would like to be able to find the index of the place number they have and replace the number on the board with their counter ("x" or "y").我正在为学校制作棋盘游戏,我希望能够找到他们所拥有的位置编号的索引,并将棋盘上的数字替换为他们的计数器(“x”或“y”)。

board = [
    ["43","44","45","46","47","48","49"],
    ["42","41","40","39","38","37","36"],
    ["29","30","31","32","33","34","35"],
    ["28","27","26","25","24","23","22"],
    ["15","16","17","18","19","20","21"],
    ["14","13","12","11","10","9 ","8 "],
    ["1 ","2 ","3 ","4 ","5 ","6 ","7 "]

    ]

for line in board:
    print (line)
roll = input("Player " + player + " press enter to roll the dice")
print ("Your counter is",counter)

if roll != "blablabla":
    die1 = random.randint(1,6)
    die2 = random.randint(1,6)
    dice = die1 + die2
    print (die1)
    print (die2)
    print ("You rolled",dice)

if player == "one":
    place1 =(place1+dice)
    print ("P1's place is",place1)
else:
    place2 =(place2+dice)
    print ("P2's place is",place2)

How can I find the string version of "place1" or "place2" in the board and replace that index with something else?如何在板上找到“place1”或“place2”的字符串版本并将该索引替换为其他内容?

Thank you!谢谢!

You need to iterate over your main list and then you can use list.index() to find the sub-list index, for example:您需要遍历主列表,然后可以使用list.index()查找子列表索引,例如:

def index_2d(data, search):
    for i, e in enumerate(data):
        try:
            return i, e.index(search)
        except ValueError:
            pass
    raise ValueError("{!r} is not in list".format(search))

And it will act exactly as list.index() but for a 2D array, so in your case:它的作用与list.index()完全相同,但对于二维数组而言,因此在您的情况下:

position = index_2d(board, "18")  # (4, 3)
print(board[position[0]][position[1]])  # 18

position = index_2d(board, "181")  # ValueError: '181' is not in list

ind = np.where(np.array(board) == str(place1)) will return the indices of all elements in the board array equal to place . ind = np.where(np.array(board) == str(place1))将返回board数组中等于place的所有元素的索引。 To replace those values do this: board[ind] = newval .要替换这些值,请执行以下操作: board[ind] = newval

Basically,基本上,

import numpy as np
ind = np.where(np.array(board) == str(place1))
board[ind] = newval

I have added a below line extra.我在下面添加了额外的一行。 Array takes integer value but not the tuple/list.数组采用整数值但不采用元组/列表。 So, is the below line in code snippet which has already given by @zwer above.因此,上面的@zwer 已经给出了代码片段中的以下行。 Thanks to @zwer.感谢@zwer。

board[position[0]][position[1]] = 'Replaced'



def index_2d(data, search):
    for i, e in enumerate(data):
        try:
            return i, e.index(search)
        except ValueError:
            pass
    raise ValueError("{} is not in list".format(repr(search)))


board = [
    ["43","44","45","46","47","48","49"],
    ["42","41","40","39","38","37","36"],
    ["29","30","31","32","33","34","35"],
    ["28","27","26","25","24","23","22"],
    ["15","16","17","18","19","20","21"],
    ["14","13","12","11","10","9 ","8 "],
    ["1 ","2 ","3 ","4 ","5 ","6 ","7 "]

    ]

position = index_2d(board, "21")
board[position[0]][position[1]] = 'Replaced'
print("{}".format(board))

Output will be like, notice "Replaced" in it.输出就像,注意其中的“已替换”。

[
['43', '44', '45', '46', '47', '48', '49'], 
['42', '41', '40', '39', '38', '37', '36'], 
['29', '30', '31', '32', '33', '34', '35'], 
['28', '27', '26', '25', '24', '23', '22'], 
['15', '16', '17', '18', '19', '20', 'Replaced'], 
['14', '13', '12', '11', '10', '9 ', '8 '], 
['1 ', '2 ', '3 ', '4 ', '5 ', '6 ', '7 ']
]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM