获取包含另一个元素的数组中元素的索引

时间:2017-04-20 08:12:13

标签: python arrays

所以我想说我有这个数组:

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

这适用于我想要的但我想检查是否有更简单,更清洁的方法来做到这一点。感谢

9 个答案:

答案 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]