获取元素的索引数组包含其他元素
所以可以说我有此数组:获取元素的索引数组包含其他元素
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
,这工作得很好我想要什么,但我想检查是否有这样做的更简单和更清洁的方式。谢谢
有一个稍微好一点的Python的方式使用next(..)
。请记住,如果任何子阵列中不存在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
这将如何返回索引? –
@ L.D是的,那是我的错误。我只是修复了它 – SuperSaiyan
真的不需要counter
变量。我会去:
for inner_array in array:
if inner_array.index(5) > -1:
return array.index(inner_array);
return None;
您可能想返回None而不是-1;因为-1也是一个有效的索引。 :) – Haranadh
如果5在内部数组的索引0中该怎么办? –
你有什么似乎要走的路,但也有一些改进可能:
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
更好地避免break
s。这里是一个更好的办法:
for ind, inner_arr in enumerate(array):
if 5 in inner_arr:
return ind
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
也许更有效的方式来做到这一点,但是这对我的作品
我想你把counter + = 1放在错误的for循环中。如果数组是array = [[1,2,3],[7,8,9],[4,5,6]] ..你的代码给出的索引仍然是1 –
一个班轮解决方案
#a = [[1,2,3],[4,5,6],[7,8,9]]
[i for i, j in enumerate(a) if 5 in j][0]
在发生器表达式上使用'next(..)'可能会给你一个短路,就像在我的回答中一样,而不必构造整个列表 – SuperSaiyan
是的,我已经完全忘记了它 - )) – marmeladze
我看功能的例子,所以我有点晚:
[(id,inner.index(5)) for id,inner
in enumerate(arr)
if 5 in inner]
作为替代使用enumerate()
,我会用下面的代码去:
for elem in array:
for i in elem:
if 5 in elem: print array.index(elem)
break
这似乎是最有效的/可读的方式给我。 – buckettt
可读性在这里是非常主观的:很多程序员会认为itertools比它们中的短暂休息的混杂更清晰。效率:没有。 Itertools – Ingaz