在Python中查找列表中所有列表的索引

0 投票
2 回答
1759 浏览
提问于 2025-05-11 00:12

我在论坛上搜索过,也试了几个答案,但似乎对我没用。

我的问题是,我有一个包含多个列表的列表,每次运行程序时,里面会有0和'M',而'M'的位置是随机的。

所以我想找出所有'M'在列表中的位置索引。

我试过这个:

hiddenfield =  [[0, 0, 0, 0, 0, 'M', 0, 0, 0, 'M'],
                [0, 0, 0, 0, 0, 'M', 0, 'M', 'M', 'M'],
                [0, 0, 'M', 0, 'M', 0, 0, 'M', 0, 'M'],
                [0, 0, 0, 0, 'M', 0, 0, 0, 0, 0],
                [0, 0, 'M', 0, 'M', 0, 0, 0, 0, 0],
                [0, 0, 0, 'M', 0, 'M', 'M', 0, 0, 0],
                [0, 0, 0, 'M', 0, 0, 0, 'M', 0, 0],
                [0, 0, 0, 'M', 0, 0, 0, 0, 0, 0],
                [0, 'M', 'M', 0, 'M', 0, 0, 0, 0, 0],
                ['M', 0, 0, 'M', 0, 0, 0, 0, 'M', 0]] 

position_of_m = []

for i in hiddenfield:
        position_of_m.append(i.index('M'))
print(position_of_m)

但我得到的只是所有列表的第一个索引,像这样:

[5, 5, 2, 4, 2, 3, 3, 3, 1, 0]

我该怎么解决这个问题呢?

编辑:

大家好,我之前得到了你们的一些帮助。但现在我真的很头疼。

代码“有点”能用。但我不想让一个列表的最后一个数字加到另一个列表的第一个数字上。这个我很难解释,所以我会在下面展示给你们看!

这是代码:

hiddenfield =  [[0, 0, 0, 0, 0, 'M', 0, 0, 0, 'M'],
            [0, 0, 0, 'M', 0, 0, 0, 'M', 'M', 'M'],
            [0, 0, 'M', 0, 'M', 0, 0, 'M', 0, 'M'],
            [0, 0, 0, 0, 'M', 0, 0, 0, 0, 0],
            [0, 0, 'M', 0, 'M', 0, 0, 0, 0, 0],
            [0, 0, 0, 'M', 0, 'M', 'M', 0, 0, 0],
            ['M', 0, 0, 'M', 0, 0, 0, 'M', 0, 0],
            [0, 0, 0, 'M', 0, 0, 0, 0, 0, 0],
            [0, 'M', 'M', 0, 'M', 0, 0, 0, 0, 'M'],
            ['M', 0, 0, 'M', 0, 0, 0, 0, 'M', 0]] 



def update_numbers(x, y, hiddenfield):
try:
    if hiddenfield[x][y] != 'M':
        hiddenfield[x][y] += 1
except IndexError:
    pass

def numbersinhiddefield(indexes):
indexes = [[i,j] for i,row in enumerate(indexes) for j,elem in enumerate(row) if elem == 'M']
loop = 0
while loop < len(indexes):
    update_numbers(indexes[loop][0]+1,indexes[loop][1], hiddenfield)
    update_numbers(indexes[loop][0]-1,indexes[loop][1], hiddenfield)
    update_numbers(indexes[loop][0],indexes[loop][1]+1, hiddenfield)
    update_numbers(indexes[loop][0],indexes[loop][1]-1, hiddenfield)
    update_numbers(indexes[loop][0]+1,indexes[loop][1]+1, hiddenfield)
    update_numbers(indexes[loop][0]-1,indexes[loop][1]-1, hiddenfield)
    update_numbers(indexes[loop][0]+1,indexes[loop][1]-1, hiddenfield)
    update_numbers(indexes[loop][0]-1,indexes[loop][1]+1, hiddenfield)
    loop += 1


def showMineFieldHidden(hiddenfield):
border = list(range(0,len(hiddenfield)))
row = [' ']+border
i = 0
for rows in [border]+hiddenfield:
    print(row[i], end=' ')
    i += 1
    for lines in rows:
        print(lines, end=' ')
    print()

numbersinhiddefield(hiddenfield)

showMineFieldHidden(hiddenfield)

但我得到的结果不太对:

  0 1 2 3 4 5 6 7 8 9 
0 0 0 1 1 2 M 2 2 4 M 
1 0 1 2 M 3 2 3 M M M 
2 0 1 M 4 M 2 2 M 5 M 
3 0 2 2 5 M 3 1 1 2 1 
4 0 1 M 4 M 4 2 1 0 0 
5 1 2 3 M 4 M M 2 1 1 
6 M 1 3 M 4 2 3 M 1 1 
7 2 3 4 M 3 1 1 1 2 2 
8 2 M M 4 M 1 0 1 2 M 
9 M 3 3 M 3 2 1 1 M 4 <-- this is supposed to be a 2.
            ^
            this is supposed to be a 1 and the one next to it a zero

我觉得它是在从边界加到下一个列表?

希望能得到一些帮助!

相关文章:

  • 暂无相关问题
暂无标签

2 个回答

0

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后把它放到另一个地方。这就像把水从一个杯子倒到另一个杯子一样。我们需要确保水不会洒出来,也就是要保证数据的完整性。

在这个过程中,我们可能会用到一些工具和方法来帮助我们更好地管理这些数据。比如,有些编程语言提供了特定的函数,可以让我们更方便地进行数据的转换和传递。

此外,处理数据时,我们还需要考虑到数据的格式。有些数据可能是文本,有些可能是数字,甚至还有可能是更复杂的结构。理解这些不同的数据类型,可以帮助我们更有效地进行编程。

总之,处理数据就像在厨房做饭一样,需要准备好食材,选择合适的工具,才能做出美味的菜肴。

m = []

for i in hiddenfield:
    start = 0
    for _ in range(i.count('M')):
        k = i.index('M',start)
        m.append(k)
        start = k
0

在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有人可能在使用某个库的时候,发现它的功能和自己想的不太一样,这就需要我们去查找资料,看看别人是怎么解决类似问题的。

有时候,解决问题的关键在于理解错误信息。错误信息就像是程序在告诉我们:“嘿,我遇到麻烦了!”我们需要仔细阅读这些信息,找出问题的根源。

此外,学习编程的过程中,多看看别人是怎么写代码的,尤其是那些经验丰富的程序员的代码,可以帮助我们提升自己的技能。记住,编程是一个不断学习和实践的过程,不要害怕犯错,重要的是从错误中吸取教训。

总之,遇到问题时,保持耐心,仔细分析,寻求帮助,逐步解决,就能不断进步。

[(i,j) for i,row in enumerate(hiddenfield) for j,elem in enumerate(row) if elem == 'M']

撰写回答