所以我想说我有这个数组:
array = [[1,2,3],[4,5,6],[7,8,9]]
我希望得到包含5的内部数组的索引。所以在这种情况下,我想要的返回索引是1。
我确实尝试了ind = array.index(5)
,但我非常清楚为什么这不起作用,因为括号中的值必须与数组中的元素完全匹配。我这样做的另一种方式是
counter = 0
for each in array:
if 5 in each: break
else: counter = counter + 1
这适用于我想要的但我想检查是否有更简单,更清洁的方法来做到这一点。感谢
答案 0 :(得分:7)
使用next(..)
有一种稍好的pythonic方法。请记住,如果5在任何子数组中都不存在,则会抛出StopIteration
。你可能想要处理它。
>>> your_list = [[1,2,3],[4,5,6],[7,8,9]]
>>> next(i for i, x in enumerate(your_list) if 5 in x)
1
答案 1 :(得分:2)
最好避免break
。这是一个更好的方法:
for ind, inner_arr in enumerate(array):
if 5 in inner_arr:
return ind
答案 2 :(得分:2)
一个班轮解决方案
#a = [[1,2,3],[4,5,6],[7,8,9]]
[i for i, j in enumerate(a) if 5 in j][0]
答案 3 :(得分:1)
你有什么似乎要走的路,但可能会有一些改进:
def find(item, array):
counter = 0
for each in array:
if item in each:
return counter
counter = counter + 1
return None
但即使是柜台也可以实现自动化:
更新:实际上不需要返回无 - 这是所有功能的默认设置
def find(item, array):
for idx, each in enumerate(array):
if item in each:
return idx
答案 4 :(得分:1)
如果您仍想使用string q1 = "What Company during the {0}, {1},{2},{3} tax years?"
q1 = string.Format(q1, model.CurYear, model.Year2, model.Year3, model.Year4);
方法,可以采用以下方法:
index
答案 5 :(得分:1)
作为使用enumerate()
的替代方法,我要使用以下代码:
for elem in array:
for i in elem:
if 5 in elem: print array.index(elem)
break
答案 6 :(得分:0)
真的不需要counter
变量。我会去:
for inner_array in array:
if inner_array.index(5) > -1:
return array.index(inner_array);
return None;
答案 7 :(得分:0)
array = [[1,2,3],[4,5,6],[7,8,9]]
counter = 0
for item in array:
for n in item:
if n == 5:
counter += 1
print counter
可能更有效的方法,但这对我有用
答案 8 :(得分:0)
我看到了功能示例,所以我有点迟了:
[(id,inner.index(5)) for id,inner
in enumerate(arr)
if 5 in inner]