我有一個列印出以下內容的二維陣列:
[[0, {'dt_name': 'Go'}], [1, {'dt_name': 'Stop'}]]
我想通過迭代此串列,這樣我就可以檢索索引值(第一個元素);如果dt_name是Go例如。即回報應該是0。如果dt_name是Stop,則回傳是1。
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
你可以試試這個:
>>> a = [[0, {'dt_name': 'Go'}], [1, {'dt_name': 'Stop'}]]
>>> [index] = [x for [x, t] in a if t['dt_name'] == 'Go']
>>> index
0
uj5u.com熱心網友回復:
你必須遍歷串列并檢查你的條件,如果你得到它,你可以打破它并獲取你的索引。
舉個例子:
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
if ans_idx=-1,這意味著您沒有相同的索引。
uj5u.com熱心網友回復:
您可以使用如下函式執行此操作:
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
uj5u.com熱心網友回復:
一種方法是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 倍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/324142.html
