[英]Get access index of a 2D array element built from 2 x 1D arrays
[英]Get index from 2d array where first element is the index
我有一個打印出以下內容的二維數組:
[[0, {'dt_name': 'Go'}], [1, {'dt_name': 'Stop'}]]
我想遍歷這個列表,以便我可以檢索索引值(第一個元素),例如如果dt_name
是Go
。 即回報應該是0
。 如果dt_name
是Stop
,則 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
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.