我正在使用Python编写一个查看列表和更改值列表的程序。
在我的列表列表中,我有3个,我想找到他们的索引。现在我只能让它在第一行工作。我想让它在“数字”的任何一个列表中找到3个。
以下是一些清洗泥浆的示例代码:
numbers = [
[3, 3, 3, 5, 3, 3, 3, 3, 6],
[8, 0, 0, 0, 4, 7, 5, 0, 3],
[0, 5, 0, 0, 0, 3, 0, 0, 0],
[0, 7, 0, 8, 0, 0, 0, 0, 9],
[0, 0, 0, 0, 1, 0, 0, 0, 0],
[9, 0, 0, 0, 0, 4, 0, 2, 0],
[0, 0, 0, 9, 0, 0, 0, 1, 0],
[7, 0, 8, 3, 2, 0, 0, 0, 5],
[3, 0, 0, 0, 0, 8, 0, 0, 0],
]
a = -1
while a:
try:
for row in numbers:
a = row[a+1:].index(3) + a + 1
print("Found 3 at index", a)
except ValueError:
break
当我跑步时,我得到:
Found 3 at index 0
Found 3 at index 1
Found 3 at index 2
Found 3 at index 4
Found 3 at index 5
Found 3 at index 6
Found 3 at index 8
这表明它正在工作但仅在第一行。
谢谢!
答案 0 :(得分:2)
如果您只想获取行索引,请使用enumerate
[docs]迭代numbers
并使用in
[docs]测试3
是否在列表中:
for index, row in enumerate(numbers):
if 3 in row:
print "3 found in row %i" % index
对于行和列索引,迭代两个列表:
for index, row in enumerate(numbers):
for col, value in enumerate(row):
if value == 3:
print "3 found in row %i at position %i" % (index, col)
如果您只想在新列表中获取索引,可以使用list comprehension [docs]:
indexes = [(row, col) for row, r in enumerate(numbers) for col, val in enumerate(r) if val == 3]
答案 1 :(得分:2)
这里有一个小代码片段可以帮助您入门:
>>> for i, row in enumerate(numbers):
if 3 in row:
print i, row.index(3)
1 8
2 5
7 3
8 0
>>> numbers[1][8]
3
>>> numbers[2][5]
3
>>> numbers[7][3]
3
>>> numbers[8][0]
3
答案 2 :(得分:1)
尝试以下方法:
[[i for i, v in enumerate(row) if v == 3] for row in numbers]
这将产生一个列表列表,其中内部列表中的每个条目都是原始列表中相应行中3的索引:
[[], [8], [5], [], [], [], [], [3], [0]]
你说你正在寻找3但你的代码似乎在找0,你想要哪个?
您可以像这样使用它:
threes = [[i for i, v in enumerate(row) if v == 3] for row in numbers]
for row, indices in enumerate(threes):
for col in indices:
print "3 found in row %d, column %d" % (row, col)
答案 3 :(得分:1)
我们不是显示信息,而是实际构建一个数据结构,为我们提供每个3
的“坐标”:
x = [
(r, c)
for r, row in enumerate(numbers)
for c, cell in enumerate(row)
if cell == 3
]
我们可以轻松验证它:
assert(all(numbers[r][c] == 3 for r, c in x))
但是如果你想要替换值,那么尝试建立这个列表然后用它来手动返回并替换东西是愚蠢的。直接生成所需的输出更清洁。也就是说,“一个列表列表,如果相应的原始值是None
,那么值为3
(假设为了参数),原始值为[[None if cell == 3 else cell for cell in row] for row in numbers]
”。
这拼写像
{{1}}
答案 4 :(得分:0)
尝试使用scipy / numpy执行此操作
import scipy as sp
matrix = your_matrix #write your matrix here. I left it.
x,y = sp.where(matrix == 3)
for i in range(len(x)):
print x[i],y[i]