簡體   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