繁体   English   中英

从二维数组中获取索引,其中第一个元素是索引

[英]Get index from 2d array where first element is the index

我有一个打印出以下内容的二维数组:

[[0, {'dt_name': 'Go'}], [1, {'dt_name': 'Stop'}]]

我想遍历这个列表,以便我可以检索索引值(第一个元素),例如如果dt_nameGo 即回报应该是0 如果dt_nameStop ,则 return 是1

我怎样才能做到这一点?

你必须遍历列表并检查你的条件,如果你得到它,你可以打破它并获取你的索引。

举个例子:

a = [[0, {'dt_name': 'Go'}], [1, {'dt_name': 'Stop'}]]
ans_idx = -1
for item in a:
  if item[1]['dt_name']=='go':
    ans_idx = item[0]
    break

如果ans_idx=-1 ,这意味着您没有相同的索引。

你可以试试这个:

>>> a = [[0, {'dt_name': 'Go'}], [1, {'dt_name': 'Stop'}]]
>>> [index] = [x for [x, t] in a if t['dt_name'] == 'Go']
>>> index
0

一种方法是在生成器表达式上使用next

lst = [[0, {'dt_name': 'Go'}], [1, {'dt_name': 'Stop'}]]
res = next(i for (i, t) in lst if t['dt_name'] == 'Go')
print(res)

输出

0

这种方法避免了构建任何额外的列表。

列表与生成器上的一些时间:

lst = [[0, {'dt_name': 'Go'}], [1, {'dt_name': 'Stop'}]] * 100
%timeit next(i for (i, t) in lst if t['dt_name'] == 'Go')
452 ns ± 2.18 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit [i for (i, t) in lst if t['dt_name'] == 'Go'][0]
12.1 µs ± 36.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

在上面的例子中,在生成器上使用 next 大约快 24 倍。

您可以使用如下函数执行此操作:

def fnd_idx(lst, wrd):
    for l in lst:
        if l[1]['dt_name'] == wrd:
            return l[0]
    return -1

输出:

>>> lst = [[0, {'dt_name': 'Go'}], [1, {'dt_name': 'Stop'}]]

>>> fnd_idx(lst, 'Go')
0

>>> fnd_idx(lst, 'Stop')
1

>>> fnd_idx(lst, 'Start')
-1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM